gpt4 book ai didi

c - 如何锁定文件以进行 O_RDWR 的读写访问

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:13 24 4
gpt4 key购买 nike

我找不到关于如何锁定文件以进行读写的答案。

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;
}

最佳答案

写锁也会阻塞读者。这是一个独占锁,因此只有*所有者才能访问锁定的字节,其他任何人都不能访问这些字节,无论是通过读取还是写入。

* fcntl() 锁是建议锁。因此,如果其他人不合作并使用 fcntl() 获取锁,则打开该文件的任何其他人都可以自由读/写它。参见 here如果你需要强制锁定

关于c - 如何锁定文件以进行 O_RDWR 的读写访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com