Puede usar fcntl() como alternativa a flock().
flock()
es generalmente seguro para señales asíncronas porque es una llamada al sistema. Su semántica hace que sea difícil implementarlo de manera diferente. No está en la lista de funciones seguras de señal asíncrona de POSIX porque no está en POSIX en absoluto.
Es probable que no necesite el desbloqueo explícito porque flock()
los bloqueos se liberan automáticamente cuando se cierran todos los descriptores de archivo que hacen referencia a la descripción del archivo abierto.
El printf()
y fprintf()
las llamadas deben reemplazarse con write()
apropiado llamadas Las funciones de stdio no están en la lista de funciones seguras para señales asíncronas y, a menudo, no son seguras para señales asíncronas.
El abort()
probablemente la mejor forma de reemplazar la llamada es establecer la señal en la acción predeterminada y volver a enviarla a sí mismo; de esta manera, los shells saben que su programa se cerró debido a la señal y pueden abortar las secuencias de comandos cuando corresponda.