Puoi usare fcntl() come alternativa a flock().
flock()
è generalmente async-signal-safe perché è una chiamata di sistema. La sua semantica rende difficile implementarlo in modo diverso. Non è nell'elenco di funzioni asincrone sicure per il segnale di POSIX perché non è affatto in POSIX.
Probabilmente non hai bisogno dello sblocco esplicito perché flock()
i blocchi vengono rilasciati automaticamente quando tutti i descrittori di file che fanno riferimento alla descrizione del file aperto vengono chiusi.
Il printf()
e fprintf()
le chiamate dovrebbero essere sostituite con l'appropriato write()
chiamate. Le funzioni stdio non sono nell'elenco delle funzioni async-signal-safe e spesso sono fortemente async-signal-unsafe.
Il abort()
call è probabilmente meglio sostituito impostando il segnale sull'azione predefinita e inviandolo nuovamente a self; in questo modo, le shell sanno che il tuo programma è terminato a causa del segnale e possono interrompere le sequenze di comandi quando appropriato.