閱讀261 返回首頁    go 技術社區[雲棲]


UC高級編程--利用信號實現進程間通信

/********************************************************************** 
*Copyright (c) 2014,TianYuan 
*All rights reserved. 
* 
* 文件名稱: sigin.c 
* 文件標識:無 
* 內容摘要:利用信號實現進程間通信,測試代碼. 把要發送的數據存放到文件中,並發送信號.
* 其它說明:無 
* 當前版本: V1.0 
* 作    者: wuyq 
* 完成日期: 20140711 
* 
*修改記錄1:   //修改曆史記錄,包括修改日期、版本號、修改人及修改內容等 
*修改日期        版本號              修改人         修改內容 
* -------------------------------------------------------------------------------------------------- 
* 20140711         V1.0                wuyq            創建 
**********************************************************************/ 
#include <signal.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>

int main()
{
	pid_t who;
	char buf[100];
	int fd;
	
	printf("qing shu ru dui fang jin cheng id:");
	scanf("%d", &who);	
	
	while(1)
	{
		printf("input send data:");
		scanf(" %[^\n]", buf);
		while(1)
		{
			fd = open("data", O_WRONLY|O_CREAT|O_EXCL, 0666);
			if(fd >= 0)
			{
				break;
			}
			puts("文件已經存在");
			sleep(1);
		}
		write(fd, buf, strlen(buf));
		close(fd);
		kill(who, SIGUSR1);//給進程發送信號
	}
	
	return 0;
}

/********************************************************************** 
*Copyright (c) 2014,TianYuan 
*All rights reserved. 
* 
* 文件名稱: sigout.c 
* 文件標識:無 
* 內容摘要:利用信號實現進程間通信,測試代碼.收到信號後,從文件讀取內容.
* 其它說明:無 
* 當前版本: V1.0 
* 作    者: wuyq 
* 完成日期: 20140711 
* 
*修改記錄1:   //修改曆史記錄,包括修改日期、版本號、修改人及修改內容等 
*修改日期        版本號              修改人         修改內容 
* -------------------------------------------------------------------------------------------------- 
* 20140711         V1.0                wuyq            創建 
**********************************************************************/    
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

void func(int sig)//信號處理函數
{
	char buf[100];
	
	int fd = open("data", O_RDONLY);
	if(fd < 0) 
	{
		return;
	}
	
	int len = read(fd, buf, sizeof(buf));
	if(len > 0)
	{
		buf[len]='\0';
		puts(buf);//輸出文件中讀取到的內容
	}
	close(fd);
	unlink("data");//刪除文件
}

int main()
{
	signal(SIGUSR1, func);
	printf("pid = %d\n", getpid());
	while(1)
	{
		sleep(1);
	}
	return 0;
}





最後更新:2017-04-03 05:39:09

  上一篇:go C雙向鏈表
  下一篇:go Cocos2d-x如何控製動作速度