社区
Linux/Unix社区
帖子详情
过年送分,外加一个文件读写问题????????
bekars
2005-02-06 04:17:23
如何在Linux中得知一个文件是否被打开了,编程如何保证一个文件只被一个程序打开,就是非共享打开文件,过年送分了!
...全文
136
9
打赏
收藏
过年送分,外加一个文件读写问题????????
如何在Linux中得知一个文件是否被打开了,编程如何保证一个文件只被一个程序打开,就是非共享打开文件,过年送分了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
limlzm
2005-02-08
打赏
举报
回复
新年快乐
nodummy
2005-02-08
打赏
举报
回复
不要用flock,上次用了一下,好像有副作用……
一般都用fcntl来做这个东西的……
sharkhuang
2005-02-07
打赏
举报
回复
应该就这个方法吧!还有其他的?
winter_sui
2005-02-07
打赏
举报
回复
用文件所比较好。
fopen函数虽然功能是打开一个文件,但其实他什么也没做,只是为进程找到文件,然后把文件的一些必要信息存在内核里。他根本不能不能锁定文件,如果再来个进程打开他也是没有问题的,而且读写都互不影响。
解决的方法就是用flock来锁定文件。简单的例子如下:
fp=open("filename","w"); //不要用fopen打开,flock需要的是用open低级打开的文件
flock(fp,LOCK_EX); //LOCK_SH, LOCK_EX, 两种锁的方式
...这时肯定是你自己打开了,作相应的处理吧。
flock(fp,LOCK_UN); //记得用完后要开锁。
honlyn
2005-02-07
打赏
举报
回复
顶
9653013
2005-02-07
打赏
举报
回复
int test_lock( int fd )
{
struct flock flockbuf;
flockbuf.l_type = F_WRLCK;
flockbuf.l_start = 0;
flockbuf.l_whence = SEEK_SET;
flockbuf.l_len = 0;
if( fcntl( fd, F_GETLK,&flockbuf ) <0 )
{
printf("can not lock %s %s\n",LOCK_FILE,strerror(errno));
exit(-1);
}
/*no lock */
if( flockbuf.l_type == F_UNLCK )
return 0;
return( flockbuf.l_pid );
}
void lock_file( int fd )
{
struct flock flockbuf;
flockbuf.l_type = F_WRLCK;
flockbuf.l_start = 0;
flockbuf.l_whence = SEEK_SET;
flockbuf.l_len = 0;
if( fcntl( fd, F_SETLK,&flockbuf ) <0 )
{
printf("can not lock %s %s\n",LOCK_FILE,strerror(errno));
exit(-1);
}
}
void judge_lock()
{
int fd;
struct stat statbuf;
if( lstat( LOCK_FILE,&statbuf ) <0 )
{
fd = open( LOCK_FILE,O_CREAT|O_TRUNC|O_RDWR,0600 );
if( fd < 0 )
{
printf("can not creat %s %s\n",LOCK_FILE,strerror(errno)
);
exit(-1);
}
lock_file( fd );
}
else
{
fd = open( LOCK_FILE,O_RDWR,0600 );
if( fd < 0 )
{
printf("can not creat %s %s\n",LOCK_FILE,strerror(errno)
);
exit(-1);
}
int ret = test_lock( fd );
/* tasker is not running*/
if( ret == 0 )
lock_file( fd );
else
{
printf("tasker is running\n");
exit(-1);
}
}
return;
}
tengulre
2005-02-06
打赏
举报
回复
我个人觉得写程序pid方法较佳
bekars
2005-02-06
打赏
举报
回复
用文件锁
如何用???
quil
2005-02-06
打赏
举报
回复
用文件锁
海量存储系列下--转载,值得一读
首先来回答
一个
问题
:为什么在磁盘中要使用b+树来进行文件存储呢? 原因还是因为树的高度低得缘故,磁盘本身是
一个
顺序读写快,随机读写慢的系统,那么如果想高效的从磁盘中找到数据,势必需要满足
一个
最重要的条件...
Java高频重点面试题,看这一篇就够了。
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,所有类从Object类中继承equals方法,比较的是是否是同
一个
对象 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;...
网站运营最全总结
吟安
一个
字,捻断数茎须。 第一部分:网站运营基础知识 ■什么是网站运营? ■商业网站常见的十一类盈利模式 ■网站运营成功的四原则 ■网站运营不成功的八大原因分析 ■网站运营需要注意的四个要素 ■网站...
快手春节红包背后,高并发存储架构设计
导语 |2020年春节,腾讯云文件存储(CFS)在通过了预演层层压测的选拔后成为快手广告推荐业务的护旗手,以100%的可用性护航了快手春节红包活动。本文是腾讯云高级工程师陈宏亮在「云加...
区块链技术
拜占庭将军
问题
反映到信息交换领域中来,可以理解为在
一个
去中心的系统中,有一些节点是坏掉的,它们可能向外界广播错误的信息或者不广播信息,在这种情况下如何验证数据传输的准确性。 区块链技术的诞生 ...
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章