ロックを解除してから閉じます。1 つのプロセスがレコード ABCDEFGHIJ を追加します。別のプロセスが同じファイルを読み取り、ZZZZ を書き込みます。通常のファイルは ZZZZ ABCDEFGHIJ である必要があります
しかし、私は一度だけ次を見ました: ZZZZEFGHIJ したがって、レコード ABCDEFGHIJ は ZZZZ で破損しています。
私のロックが機能していないようです。しかし、私はそれをテストしました。あるプロセスが実際に別のプロセスを待っています。open と lock の間で、別のプロセスがファイルに書き込むことはできますか? それともロック解除とクローズの間?
コードは以下です
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);
}
UnLock(fd) を close(fd) しようとしました。それはうまくいくようです。とにかく、開いてからロックするまでに遅延があります。ありがとう。