关闭

进程互斥----ttylock()类似原理实现

527人阅读 评论(0) 收藏 举报
分类:

之前帮朋友看了一下代码,他想用ttylock(),ttyunlock()系列函数去锁定/dev/ttyS0,但是编译时找不到这些函数,后来我发现这个函数是AIX上的,后来看了一下他的原理。

故按其原理实了如下函数:用以在进程启动时杀掉已经启动的相同进程。


int check_lock(char*file){
	FILE*fd;
	int bpid;
	fd=fopen(file,"r");
	if(fd==NULL){
		if(errno==2){
			fd=fopen(file,"w+");
			if(fd==NULL){ return -1;}
		}
		return -1;
	}
	fscanf(fd," %d",&bpid);
	fclose(fd);
	if(bpid!=getpid()){
		if(kill(bpid,0)==0){
			return bpid; ////有进程已经运行
		}
		return 0; //no locked
	}
	return 1;	//our locked
}
int write_lock(char*file){
	FILE*fd;
	int bpid=check_lock(file);
	if(bpid>1){
		if(0!=kill(bpid,9)){  //强制杀死进程
			return -1;
		}
		sleep(1); //进程消失还要延迟一会
	}
	fd=fopen(file,"w");
	if(fd==NULL){
		return -1;
	}
	fprintf(fd," %10d\n",getpid());
	fclose(fd);
	return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:146015次
    • 积分:2249
    • 等级:
    • 排名:第16692名
    • 原创:70篇
    • 转载:57篇
    • 译文:7篇
    • 评论:5条
    最新评论