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