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

来源:互联网 发布:删除列sql语句 编辑:程序博客网 时间:2024/06/08 07:48

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