社区
Linux/Unix社区
帖子详情
过年送分,外加一个文件读写问题????????
bekars
2005-02-06 04:17:23
如何在Linux中得知一个文件是否被打开了,编程如何保证一个文件只被一个程序打开,就是非共享打开文件,过年送分了!
...全文
121
9
打赏
收藏
过年送分,外加一个文件读写问题????????
如何在Linux中得知一个文件是否被打开了,编程如何保证一个文件只被一个程序打开,就是非共享打开文件,过年送分了!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
用文件锁
海量存储系列下--转载,值得一读
海量存储系列之八 http://qing.blog.sina.com.cn/1765738567/693f0847330008ii.html 首先来回答
一个
问题
:为什么在磁盘中要使用b+树来进行文件存储呢? 原因还是因为树的高度低得缘故,磁盘本身是
一个
顺序读写快,随机读写慢的系统,那么如果想高效的从磁盘中找到数据,势必需要满足
一个
最重要的条件:减少寻道次数。 我们以平衡树为例进行...
Java高频重点面试题,看这一篇就够了。
1.==和equals区别? 1)对于==,比较的是值是否相等 如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址 2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,所有类从Object类中继承equals方法,比较的是是否是同
一个
对象 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象
网站运营最全总结
老骥伏枥,志在千里;烈士暮年,壮心不已。溪云初起日沉阁,山雨欲来风满楼。疏影横斜水清浅,暗香浮动月黄昏。举头望明月,低头思故乡。吟安
一个
字,捻断数茎须。 第一部分:网站运营基础知识 ■什么是网站运营? ■商业网站常见的十一类盈利模式 ■网站运营成功的四原则 ■网站运营不成功的八大原因分析 ■网站运营需要注意的四个要素 ■网站运营总监的五大能力要求 ■新建项目如何管理团队,选拔人才
快手春节红包背后,高并发存储架构设计
导语 |2020年春节,腾讯云文件存储(CFS)在通过了预演层层压测的选拔后成为快手广告推荐业务的护旗手,以100%的可用性护航了快手春节红包活动。本文是腾讯云高级工程师陈宏亮在「云加...
10年,4个单位
第
一个
单位: 03年从大学毕业,应同学推荐,入职于劳动局下属的劳动就业管理处,充当
一个
小网管:电话坏了,修修;打印机坏了,修修;电脑(包括多媒体终端)坏了,修修;网络坏了,修修;复印机、速印机坏了,打电话让专业人士修修。 入职后的第一件事情,是负责《劳动力市场信息网络》(
一个
关于劳动力招聘和求职的系统)的升级扩容,这主要包括两个部分:一是将《劳动力市场信息网络》扩展到下属的38个乡镇的办事
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章