平台:ubuntu 14.4
gcc 版本:4.8.2
语言:C
情况:
我有两个文件来测试lockf的功能。一个是写,一个是读。
在写目标文件时应该被锁定,从而禁止读取打开同一个文件。
问题:
当我运行写程序时,我只是让它等待用户输入并启动读程序。不知何故,读取能够获取目标文件中的信息。这意味着 write 中的 lockf 没有正确锁定它。为什么我失败了?
代码:
读.c
int main()
{
char buffer[4];
char *filename = "/home/fikrie/Documents/test_lockf/file.txt";
int fd;
fd = open(filename, O_RDONLY, 0644);
lockf(fd, F_LOCK, 3);
while (1) {
if (read(fd, buffer, 3) == -1) {
printf("Error getting file");
break;
} else {
printf("%s",buffer);
getchar();
}
}
close(fd);
lockf(fd, F_ULOCK, 0);
return 0;
}
写.c
int main()
{
char buffer;
char *filename = "/home/fikrie/Documents/test_lockf/file.txt";
int fd;
fd = open(filename, O_WRONLY | O_APPEND, 0644);
lockf(fd, F_LOCK, 3);
while(1) {
buffer = getchar();
if (buffer != 'q') {
write(fd,"ABC",3);
write(fd,":",1);
}
else {
break;
}
}
close(fd);
lockf(fd, F_ULOCK, 0);
return 0;
}
ETC:
从手册页,
lockf(int fd, int function, off_t size);
size参数是要锁定或解锁的连续字节数。要锁定或解锁的部分从文件中的当前偏移量开始,向前扩展为正大小或向后扩展为负大小。
我以为我为大小参数传递了错误的值,所以我也尝试传递 0。但结果是一样的。