fcntl () область видимости поведение? - PullRequest
3 голосов
/ 03 марта 2012

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

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;
}

1 Ответ

2 голосов
/ 03 марта 2012

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

...