其中fcntl保存锁定信息

时间:2016-06-30 06:46:02

标签: linux locking multiprocessing fcntl

我想知道fcntl c ++函数在哪里保存有关锁定文件的信息。我知道它在/ proc / locks上保存了一些信息,但即使被其他主机锁定,fcntl也会识别锁定

在我的第一个主机中,我通过F_WRLCK锁定了一些文件。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include<iostream>
main() {

    int fd;
    struct flock lock;
    lock.l_type=F_WRLCK;
    lock.l_start=0;
    lock.l_whence= SEEK_SET;
    lock.l_len=0;
    printf("open %d\n",fd=open("/u/embedit/places/scratch/gtevos/ts16nxq42p11assrl16kaa03/ts16nxq42p11assrl16kaa.cpj", O_RDWR ));
    int rc = fcntl(fd, F_SETLK, &lock);
    std::cout<<rc<<std::endl;
    std::cin>>fd;

}

当我试图通过F_RDONLY锁定我的第二台主机上的同一文件时,它不起作用。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include<iostream>
main() {
    int fd;
    struct flock lock;
    lock.l_type=F_RDLCK;
    lock.l_start=0;
    lock.l_whence= SEEK_SET;
    lock.l_len=0;

    printf("open %d\n",fd=open("/u/embedit/places/scratch/gtevos/ts16nxq42p11assrl16kaa03/ts16nxq42p11assrl16kaa.cpj", O_RDONLY ));
    int rc = fcntl(fd, F_SETLK, &lock);
    std::cout<<rc<<std::endl;
    std::cin>>fd;

}

我只是想了解使用哪种机制来提供正确识别锁的能力。

0 个答案:

没有答案