fcntl 没有 lock/unlock 文件 [Unix - C]
fcntl doesn't lock/unlock the files [Unix - C]
我正在尝试使用 fcntl lib(在 UNIX c 编程中)来锁定或解锁文件,但似乎没有锁定,我不知道为什么。我没有收到任何错误,看起来程序正在执行锁定但实际上我可以 read/write 文件并且没有锁定
if (enter == 2){
getchar ();
int fd;
struct flock lock;
char file[20];
printf ("Enter file name:");
fgets(file,20,stdin);
printf ("opening %s\n", file);
//Open a file descriptor to the file
fd = open (file, O_RDWR);
printf ("locking\n");
//Initialize the flock structure
memset (&lock, 0, sizeof(lock));
lock.l_type = F_WRLCK;
//Place a write lock on the file
fcntl (fd, F_SETLK, &lock);
printf ("locked; hit Enter to unlock... ");
//Wait for the user to hit Enter
getchar ();
printf ("unlocking\n");
//Release the lock
lock.l_type = F_UNLCK;
fcntl (fd, F_SETLK, &lock);
close (fd);
你没有检查fcntl
的结果就声称你锁定了文件,这太大胆了。
无论如何,这是预期的行为。获得锁只是防止其他人获得锁。[1]它不会阻止任何人读取或写入文件。
- 写锁防止任何人获得锁,而读锁只防止获得写锁。
我正在尝试使用 fcntl lib(在 UNIX c 编程中)来锁定或解锁文件,但似乎没有锁定,我不知道为什么。我没有收到任何错误,看起来程序正在执行锁定但实际上我可以 read/write 文件并且没有锁定
if (enter == 2){
getchar ();
int fd;
struct flock lock;
char file[20];
printf ("Enter file name:");
fgets(file,20,stdin);
printf ("opening %s\n", file);
//Open a file descriptor to the file
fd = open (file, O_RDWR);
printf ("locking\n");
//Initialize the flock structure
memset (&lock, 0, sizeof(lock));
lock.l_type = F_WRLCK;
//Place a write lock on the file
fcntl (fd, F_SETLK, &lock);
printf ("locked; hit Enter to unlock... ");
//Wait for the user to hit Enter
getchar ();
printf ("unlocking\n");
//Release the lock
lock.l_type = F_UNLCK;
fcntl (fd, F_SETLK, &lock);
close (fd);
你没有检查fcntl
的结果就声称你锁定了文件,这太大胆了。
无论如何,这是预期的行为。获得锁只是防止其他人获得锁。[1]它不会阻止任何人读取或写入文件。
- 写锁防止任何人获得锁,而读锁只防止获得写锁。