怎样实现一个文件互斥的访问程序?

liougehooa 2006-08-03 10:43:36
如题,我写的程序如下:

#include <fcntl.h>
#include <unistd.h>
struct flock* file_lock(short type, short whence)
{
static struct flock ret ;
ret.l_type = type ;
ret.l_start = 0 ;
ret.l_whence = whence ;
ret.l_len = 0 ;
ret.l_pid = getpid() ;
return &ret ;
}

int main(){
int fd=open("/home/liougehooa/lo.txt",O_WRONLY|O_CREAT|O_EXCL|O_TRUNC,00777);
long i=fcntl(fd,F_SETLKW,file_lock(F_WRLCK,SEEK_SET));
while(1);
return i;
}
然后编译并后台运行,同时rm lo.txt,lo.txt还是被删掉了。
...全文
187 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hchf_1 2006-08-03
  • 打赏
  • 举报
回复
你是希望在你执行这个程序的时候这个文件不被删掉吗?

我没接触过类似的问题,不过我觉得和这个实现起来不是互斥访问就能解决的.

当你的程序打开这个文件以后,你的程序访问这个文件就是在访问系统打开的文件流,和硬盘没什么关系,你所有的操作都是针对这个流的.而你在执行rm的时候他是直接删除硬盘上的i节点,并不操作文件流,所以你的程序就算实现互斥也不能阻止他被删除.你还是研究一下比较底层的保护措施吧.

kangji 2006-08-03
  • 打赏
  • 举报
回复
好像有个函数 lockf 专门做这个事情的

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧