为什么我锁不住ta ??

发布于 2022-10-15 04:31:27 字数 1356 浏览 20 评论 0

  1. #include<stdio.h>
  2. #include<errno.h>
  3. #include<fcntl.h>
  4. #include<stdlib.h>
  5. #include<unistd.h>
  6. #include<sys/file.h>
  7. int main(int argc,char**argv){
  8.         int fd;
  9.         fd=open("test",O_WRONLY);
  10.         if(fd==-1){
  11.                 perror("open");
  12.                 exit(1);
  13.         }
  14.         if(flock(fd,LOCK_EX)!=0){
  15.                 perror("flock");
  16.                 exit(1);
  17.         }
  18.         printf("input any to exit:");
  19.         getchar();
  20.         flock(fd,LOCK_UN);
  21.         close(fd);
  22.         return 0;
  23. }

复制代码
flock有没有作用的?
我运行这段程序后,在getchar之前,还是可以打开及读写test文件的??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟若柳尘 2022-10-22 04:31:27

本帖最后由 crazyhadoop 于 2011-06-12 13:31 编辑

flock 对fd加锁表示没有别的线程可以再 用这个文件fd编辑文本,你可以再执行一个这个程序,另外的一个就阻塞了。

不知道为什么别的编辑器还可以编辑这个文件,难道编辑的是副本?

纵性 2022-10-22 04:31:27

本帖最后由 crazyhadoop 于 2011-06-13 00:32 编辑

回复 1# Horizon2012

    flock 实现的是建议锁,建议你尝试fcntl对文件上锁~~要上强制锁

    你可以多执行几次你这个程序, 然后 less /proc/locks 文件某几行的变化~~

    因为你写的这个程序检测了这个文件上没上锁,所以后来执行的程序都被阻塞住了,但是你如果用vim或者其他编辑器来
编辑这个文件,他们并不检测你要打开的文件是否上了锁~ 但是如果上了强制锁,就不能随意编辑了,若是建议锁,就很随意了。

悲欢浪云 2022-10-22 04:31:27


嗯嗯 果真如此
LOCK_SH 是共享锁定/读锁  
LOCK_EX 是互斥锁定/写锁
只要有一个进程对文件写锁后,其他进程flock LOCK_EX或者flock LOCK_SH的时候,其他进程都会阻塞
只有当所有的写锁解除LOCK_UN后,flock LOCK_SH的进程才能从阻塞返回

但是要完成上面功能,进程须使用flock来检查锁
如果进程不用flock就无法检查这两种锁定,进程依旧可以打开读写,
相当于进程不使用flock,这两种锁定对该进程没有任何影响/没有强制力

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文