程序間的通訊(四)
阿新 • • 發佈:2018-12-24
編寫程式完成以下要求:
程序A向程序B傳送訊號;
程序B收到程序A傳送的訊號後,打印出傳送訊號程序的pid,uid以及訊號值。
通過對之前實驗的瞭解,我們知道sigqueue函式能夠向程序傳送除訊號之外的其它更多的資訊。因此,我決定應用四個queue函式將傳送程序的pid,uid跟訊號一起傳送給接受程序。
程式如下:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> void handler(int sig,siginfo_t* act,void *p) { printf("The sender's pid is: %d\n",act->si_pid); printf("The sender's uid is: %d\n",act->si_uid); printf("The sig is: %d\n",sig); } int main() { int pid; union sigval mysigval; pid = fork(); if(pid < 0) perror("fork"); else if(pid == 0) { printf("This is the received process!\n"); struct sigaction act; act.sa_sigaction = handler; act.sa_flags = SA_SIGINFO; if(sigaction(SIGUSR1,&act,NULL) < 0) perror("sigaction"); while(1); } else { printf("This is the send process!\n"); sleep(1); printf("The sender's pid is: %d\n",getpid()); if(sigqueue(pid,SIGUSR1,mysigval) < 0) perror("sigqueue"); } return 0; }
程式執行結果: