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

之前帮朋友看了一下代码,他想用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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值