1
읽기 - 쓰기 용으로 파일을 잠그는 방법에 대한 답을 찾을 수 없습니다.O_RDWR에 대한 읽기 및 쓰기 액세스를 위해 파일을 잠그는 방법
lock.l_type = F_WRLCK //for write.
lock.l_type = F_RDLCK //for read
lock.l_type = F_RDLCK|F_WRLCK //maybe for read/write????
아래 코드가 정확합니까?
fd=MyOpenWrite(name,O_RDWR); //for read/write
//(open file for read/write, but lock for write)
...
fd=MyOpenRead(name,O_RDONLY); //open and lock for read
...
fd=MyOpenWrite(name,O_CREAT|O_WRONLY|O_TRUNC); //for write
...
fd=MyOpenWrite(name,O_WRONLY|O_APPEND); //for append
int MyOpenRead(char *name,int flags) {
int fd;
struct flock lock;
fd = open(name,flags);
if (fd<0) return -1;
lock.l_type = F_RDLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
fcntl(fd,F_SETLKW,&lock);
return fd;
}
int MyOpenWrite(char *name,int flags) {
int fd;
struct stat st;
fd = open(name,flags,S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
if (fd<0) return -1;
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
fcntl(fd,F_SETLKW,&lock);
return fd;
}
흠. 읽기, 쓰기 및 읽기/쓰기 (하나의 프로세스에만 해당)에 대한 독점 잠금이 필요합니다. 그리고 나는 어떤 자물쇠 타입이 나를 위해 더 좋을지 이해할 수 없었다. 하지만 읽기/쓰기 열기 (... O_RDWR) 파일 잠금 방법? 감사. – nms
@nms 어떤 프로세스가 당신이 쓰고있는 데이터를 읽는 것이 꽤 쓸모 없으며 경쟁 조건을 초래합니다. 따라서 작성자를 차단하는 쓰기 잠금은 없습니다. 쓰기 잠금은 독자와 작성자를 잠급니다. – nos
오케이. 읽기 잠금에 관해서. 나는 그것이 쓰기 및 다른 독자들조차해야한다고 생각한다. 위의 코드가 맞습니까? 감사. – nms