2010-01-13 2 views

ответ

3

Это работает так:

#include <io.h> 
#include <sys/file.h> 
... 
int f = open ("filename", O_RDONLY); 
if (f < 0) 
     error(); 
if (flock (f, LOCK_EX)) 
     error(); 
sleep (10); 

if (flock (f, LOCK_UN)) 
     error(); 
... 
+5

Имейте в виду, что это не обязательные блокировки, они являются консультативными блокировками - все, кто использует файл, также должны ставить его. Если они этого не делают, они могут свободно манипулировать файлом. – nos

1

Использование fcntl(2) для блокировки файла, а затем использовать alarm(2) для вызова SIGALRM обработчик, который будет разблокировать его.

+1

Безопасно ли вызывать 'flock' в обработчике сигналов? –

+0

Hrm. 'сигнал (7)' говорит нет. 'fcntl (2)' должно быть хорошо, хотя. –

Смежные вопросы