2012-03-02 4 views
3

Возможно ли использовать fcntl() внутри функции, отличной от main()? Разблокируется ли файл после его вызова? Я говорю это, потому что в этом случае fcntl() и большинство всего остального внутри lockfile() выходят за пределы области действия, когда функция returns.fcntl() видимость видимости видимости?

int lockfile(void){ 
    int fd; 
    const char *path = "path-to-lockfile"; 

    struct flock fl; 
    fl.l_type = F_WRLCK; 
    fl.l_whence = SEEK_SET; 
    fl.l_start = 0; 
    fl.l_len = 0 
    fl.l_pid = getpid(); 

    fd = open(path, O_RDWR|O_CREAT); 

    fcntl(fd, F_SETLKW, &fl); 

    return fd; 
} 
+0

Прочтите это и подумайте, что мы поговорим о поведении птиц. –

ответ

2

fcntl вызов помещает блокировку на файл. Он остается до тех пор, пока файл не будет закрыт или блокировка не будет отпущена. Структуры нужны только для того, чтобы сообщить fcntl, что делать.

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