261
技術社區[雲棲]
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