C fcntl抽象函数不起作用
我正在编写一个应用程序及其在我需要锁定的规范中
每次我写一个文件(这个文件将被其他应用程序读取
其他团队正在努力):
我做了以下功能:
int lock_file (int fd)
{
if (fd == -1)
return -1;
struct flock file_locker;
file_locker.l_type = F_WRLCK;
file_locker.l_whence = SEEK_SET;
file_locker.l_start = 0;
file_locker.l_len = 0; //lock the entire file
int locked = fcntl(fd, F_SETLK, &file_locker);
if (locked == -1){
/*handle errors*/
return 0;
}
return 1;
}
我可以得到1回报(意味着一切都好)但是我做了一个测试用例
我可以写入锁定的文件Oo
测试代码是:
char *file = "lock_test_ok";
int fd = open(file, O_RDWR);
int locked = lock_file(fd);
/* call popen and try write 'ERROR' in the file */
/* if the file contains ERROR, than fail */
没有找到相关结果
已邀请:
3 个回复
镀建啼
摊揉售
调用不会遵循锁定协议(这只是建议,而不是由操作系统强制执行),因此即使调用
的进程仍然存在,写入也会发生。拿着锁。
雄鞋谋塘
锁是建议性的。它们不会阻止任何人打开和写入文件。他们唯一做的就是阻止其他进程获取自己的
锁。 如果您控制文件的所有编写器,这很好,因为您可以让每个编写器首先尝试锁定该文件。否则你就被软管了。 Unix不提供任何“强制”锁(导致
或
失败的锁)。