如何检查文件是否被锁定?
我有以下代码,我想检查文件是否被锁定。 如果没有,那么我想写信给它。 我通过在两个终端上同时运行它来运行此代码但是我每次都在两个选项卡中都处于“锁定”状态,即使我没有锁定它。 代码如下:
#include #include #include int main() { struct flock fl,fl2; int fd; fl.l_type = F_WRLCK; /* read/write lock */ fl.l_whence = SEEK_SET; /* beginning of file */ fl.l_start = 0; /* offset from l_whence */ fl.l_len = 0; /* length, 0 = to EOF */ fl.l_pid = getpid(); /* PID */ fd = open("locked_file", O_RDWR | O_EXCL | O_CREAT); fcntl(fd, F_GETLK, &fl2); if(fl2.l_type!=F_UNLCK) { printf("locked"); } else { fcntl(fd, F_SETLKW, &fl); /* set lock */ write(fd,"hello",5); usleep(10000000); } printf("\n release lock \n"); fl.l_type = F_UNLCK; fcntl(fd, F_SETLK, &fl); /* unset lock */ }
非常简单,只需使用F_GETLK而不是F_SETLK运行fnctl。 这会将指针上的数据设置为锁的当前状态,您可以通过访问l_type属性来查找它是否被锁定。
有关详细信息,请参阅: http : //linux.die.net/man/2/fcntl 。
你还需要fl2
将memset
为0.否则当你在失败时使用fcntl(fd, F_GETLK, &fl2)
和perror
时,你会在终端上看到一条消息:
fcntl:无效的争论
我建议您在调试系统调用时使用perror
。