1. 程式人生 > >程序間的通訊(四)

程序間的通訊(四)

編寫程式完成以下要求:

程序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;
}

程式執行結果: