仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 762|回复: 8
打印 上一主题 下一主题

[其他Linux] 来讲讲:在Linux下避免某个程序被运转两次的办法

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 16:13:42 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用gcc或g++进行编译,使用gdb进行调试;
经由过程文件锁来完成,在程序运转的一入手下手,反省某文件是不是存在,假如存在则申明改程序已在运转了,假如不存在则使用open语句创立该文件,程序加入时封闭并删除此文件。
staticcharfile_lock[sizeof(ctl_addr.sun_path)]=/var/run/file.pid;
  staticboolfile_lock_created=FALSE;
  
  staticint
  create_lock(void)
  {
  intfd=open(file_lock,O_WRONLY|O_CREAT|O_EXCL|O_TRUNC,
  S_IRUSR|S_IRGRP|S_IROTH);
  
  if(fd<0)
  {
  if(errno==EEXIST)
  {
  fprintf(stderr,"file:lockfile"%s"alreadyexists
",file_lock);
  exit_file(10);
  }
  else
  {
  fprintf(stderr,"file:unabletocreatelockfile"%s"(%d%s)
"
  ,file_lock,errno,strerror(errno));
  exit_file(1);
  }
  }
  file_lock_created=TRUE;
  returnfd;
  }
  
  staticbool
  fill_lock(intlockfd)
  {
  charbuf[30];/*holds"
"*/
  pid_tpid;
  intlen;
  
  pid=getpid();
  len=snprintf(buf,sizeof(buf),"%u
",(unsignedint)pid);
  boolok=len>0&&write(lockfd,buf,len)==len;
  
  close(lockfd);
  returnok;
  }
  
  staticvoid
  delete_lock(void)
  {
  if(file_lock_created)
  {
  //delete_ctl_socket();
  unlink(file_lock);/*isnotingfailureuseful?*/
  }
  }
</p>
由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。
小魔女 该用户已被删除
沙发
 楼主| 发表于 2015-3-27 19:08:39 | 显示全部楼层
如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-16 11:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表