Jako alternativu k flock() můžete použít fcntl().
flock() je obecně asynchronní signál bezpečný, protože se jedná o systémové volání. Jeho sémantika ztěžuje jeho odlišnou implementaci. Není v seznamu funkcí POSIX bezpečných pro asynchronní signál, protože v POSIX vůbec není.
Pravděpodobně nepotřebujete explicitní odemknutí, protože flock() zámky se uvolní automaticky, když jsou zavřeny všechny deskriptory souboru odkazující na popis otevřeného souboru.
printf() a fprintf() volání by měla být nahrazena odpovídajícími write() hovory. Funkce stdio nejsou v seznamu funkcí async-signal-safe a často jsou silně async-signal-unsafe.
abort() hovor je pravděpodobně nejlepší nahradit nastavením signálu na výchozí akci a jeho přeposláním sobě; tímto způsobem shelly vědí, že váš program skončil kvůli signálu, a mohou zrušit sekvence příkazů, když je to vhodné.