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é.