Sie können fcntl() als Alternative zu flock() verwenden.
flock()
ist im Allgemeinen asynchronsignalsicher, da es sich um einen Systemaufruf handelt. Seine Semantik macht es schwierig, es anders zu implementieren. Es ist nicht in der POSIX-Liste der asynchronsignalsicheren Funktionen, weil es überhaupt nicht in POSIX enthalten ist.
Wahrscheinlich brauchen Sie die explizite Entsperrung nicht, weil flock()
Sperren werden automatisch freigegeben, wenn alle Dateideskriptoren, die auf die geöffnete Dateibeschreibung verweisen, geschlossen sind.
Die printf()
und fprintf()
Aufrufe sollten durch den entsprechenden write()
ersetzt werden Anrufe. Die stdio-Funktionen sind nicht in der Liste der Async-Signal-sicheren Funktionen und sind oft stark async-Signal-unsicher.
Die abort()
Anruf wird wahrscheinlich am besten ersetzt, indem das Signal auf die Standardaktion gesetzt und erneut an sich selbst gesendet wird. Auf diese Weise wissen Shells, dass Ihr Programm aufgrund des Signals beendet wurde, und können Befehlssequenzen gegebenenfalls abbrechen.