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

原创 2013年12月02日 20:39:19

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


相关文章推荐

浅谈两种方法实现进程互斥的原理

浅谈两种方法实现进程互斥的原理 浅谈两种方法实现进程互斥的原理 对临界资源的使用通过量种方法实现: 管程机制和信号量机制(记录性信号量和AND信号量); ...

操作系统原理读书笔记之进程互斥

临界资源:表示该资源一次只允许一个进程使用,也叫互斥资源或共享变量 临界区(互斥区):各个进程对某个临界资源实施操作的程序片段 解决进程互斥的方法 软件方案: 1、加锁(对free加锁...

利用Swap指令进程互斥实现

这里用线程来模拟  硬件方法同步机制的Swap方法指令 利用下面的代码 能有效的实现进程互斥 但当临界资源忙碌时其他访问进程 必须不断测试 处于一种忙等状态 不符合让权等待 造成处理机时间的浪费 同时...

CreateMutex函数函数用来实现进程互斥

CreateMutex函数 正常情况下,一个进程的运行一般是不会影响到其他正在运行的进程的。但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端...

linux网络编程之System V 信号量(二):用信号量实现进程互斥示例和解决哲学家就餐问题

一、我们在前面讲进程间通信的时候提到过进程互斥的概念,下面写个程序来模拟一下,程序流程如下图: 即父进程打印字符O,子进程打印字符X,每次打印一个字符后要sleep 一下,这里要演示的效果是,在打...

C例子:进程互斥

  • 2015年12月22日 22:32
  • 691B
  • 下载

临界区进程互斥模拟

  • 2014年10月13日 16:59
  • 1.84MB
  • 下载

semget函数 semopt 采用信号量处理多进程互斥同步

转自: http://blog.csdn.net/wbj1234566/article/details/2256629 采用信号量处理多进程互斥同步        信号量与消息类似,也是...
  • hcwzq
  • hcwzq
  • 2011年08月01日 21:25
  • 447

实验五、进程互斥实验

  • 2013年05月28日 13:43
  • 69KB
  • 下载

进程互斥实验

  • 2015年10月07日 21:27
  • 182KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程互斥----ttylock()类似原理实现
举报原因:
原因补充:

(最多只允许输入30个字)