|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。 |
|