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 2013-03-19 10:42:22
@nms有一些進程讀取你正在寫入的數據是非常沒用的,並導致競態條件。所以沒有寫鎖只能阻止作者。寫鎖將鎖定讀者和作者。 – nos 2013-03-19 11:14:22
好的。至於讀鎖。我想它應該鎖定寫入甚至其他讀者。那麼我的代碼是否正確?謝謝。 – nms 2013-03-19 11:41:30