免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6312 | 回复: 10
打印 上一主题 下一主题

[函数] 关于文件独占写的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-26 15:29 |只看该作者 |倒序浏览
我想对一个文件进行独占写操作,但是允许其他进程只读,试着用 fcntl()去做, 好像达不到效果


  1. lock.l_type=F_WRLCK;
  2. lock.l_start=0;
  3. lock.l_whence=SEEK_SET;
  4. lock.l_len=0;

  5. if(fcntl(fd,F_SETLK,&lock)<0)
  6. {
  7.     perror(“fcntl");
  8.     exit(1);
  9. }
复制代码


上网查过一些资料,说 fcntl() 是用户级的锁, 不是文件级的锁, 那么 Unix 是否有其他相关函数可以做到呢?

论坛徽章:
0
2 [报告]
发表于 2008-03-26 16:26 |只看该作者
用户级、文件级,不是一个层次的概念吧。

fcntl可以做到锁整个文件。
也可以用flock。

论坛徽章:
0
3 [报告]
发表于 2008-03-26 16:37 |只看该作者
and   lockf?

论坛徽章:
0
4 [报告]
发表于 2008-03-26 16:45 |只看该作者
man lockf
On Linux, this call is just an interface for fcntl(2)

论坛徽章:
0
5 [报告]
发表于 2008-03-26 16:59 |只看该作者
谢谢楼上给出的建议   搜到一点关于锁函数的资料

有三个文件锁函数:
    flock();
      lockf();
      fcntl();

flock()是从BSD中衍生出来的,但目前在大多数UNIX系统上都能找到,在单个主
机上flock()简单有效,但它不能在NFS上工作。

fcntl()是唯一的符合POSIX标准的文件锁实现,所以也是唯一可移植的。它也同
时是最强大的文件锁--也是最难用的。在NFS文件系统上,fcntl()请求会被递
交给叫rpc.lockd的守护进程,然后由它负责和主机端的lockd对话,和flock()
不同,fcntl()可以实现记录层上的封锁。

lockf()只是一个简化了的fcntl()文件锁接口。


有人碰到过关于独占写的问题吗   我觉得UNIX-应用层做到这个控制比较困难, 继续等待...

论坛徽章:
0
6 [报告]
发表于 2008-03-26 22:05 |只看该作者
楼主好像没搞明白,锁分两种:一种是建议写锁,一种是强制锁。你这个如果没达到效果那肯定是建议写锁,强制写锁就是说:一旦你锁住了,文件就不能被别的进程写了。。
也许你想用的是这个。。

论坛徽章:
0
7 [报告]
发表于 2008-03-26 23:08 |只看该作者
楼主是不是想独占写,共享读呢?那可以用读写锁。pthread_rwlock_rdlock/pthread_rwlock_wrlock

想对一个文件写,同时其他进程可读,这要求是真的吗?

论坛徽章:
0
8 [报告]
发表于 2008-03-27 14:23 |只看该作者

回复 #6 It'sGifted 的帖子

感谢#6
你提出的是对的  我是想达到强制锁的目的
但并不是所有的OS都支持强制锁

[ 本帖最后由 shiningLoRe 于 2008-3-27 14:25 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-03-27 14:29 |只看该作者

回复 #7 huachong 的帖子

只是想对文件写的时候  
其他进程或I/O流不可写,但可读
一直到写操作完成后

论坛徽章:
0
10 [报告]
发表于 2008-03-27 18:34 |只看该作者
如果支持强制锁,你可以试试看

chmod g-x ur-file
chmod g+s ur-file
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP