我先解锁然后关闭。一个过程附加记录 ABCDEFGHIJ。另一个进程读取同一个文件并写入 ZZZZ。普通文件应该是 ZZZZ ABCDEFGHIJ
但只有一次我看到了以下内容: ZZZZEFGHIJ 所以记录 ABCDEFGHIJ 被 ZZZZ 损坏了。
看来我的锁定不起作用。但我测试了它。一个进程真的在等待另一个进程。另一个进程可以在打开和锁定之间写入文件吗?还是在解锁和关闭之间?
代码如下
int MyOpenWrite(char *name,int flags) {
int fd
fd = open(name,flags,S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
LockFile(fd);
return fd;
}
int WriteFile(char *name, char *data) {
...
fd = MyOpenWrite(fullName,O_CREAT|O_WRONLY|O_TRUNC);
write(fd,data,strlen(data));
UnLockFile(fd);
close(fd);
}
int ReadFile(char *name, char *data, int maxLength) {
fd = open(name,O_RDONLY);
LockFile(fd);
...
UnLockFile(fd);
close(fd);
}
int AppendFile(char *name, char *data) {
fd = MyOpenWrite(fullName,O_WRONLY|O_APPEND);
...
len=write(fd,data,strlen(data));
UnLockFile(fd);
close(fd);
}
int LockFile(int fd) {
struct flock lock;
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
return fcntl(fd,F_SETLKW,&lock);
}
int UnLockFile(int fd) {
struct flock lock;
lock.l_type = F_UNLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
return fcntl(fd,F_SETLKW,&lock);
}
我尝试关闭(fd)UnLock(fd)。它似乎有效。但是无论如何,打开和锁定之间存在延迟。谢谢。