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

程序間的通訊(三)

編寫程式完成以下功能:

呼叫setitimer函式分別觸發SIGALRM訊號,SIGVTALRM訊號,SIGPROF訊號 ;(可以由多程序分別觸發每個訊號)
編寫訊號安裝函式,在該函式內部能判斷接受到的是什麼訊號,並把訊號打印出來。

 

setitimer函式的作用是提供精確的定時功能。通過改變settitime函式的第一個引數就能夠改變函式觸發的訊號。

程式如下:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/types.h>
void fun(int sig)
{
	if(sig == SIGALRM)
	  printf("Received the SIGALRM!\n");
	else if(sig == SIGVTALRM)
	  printf("Receive the SIGVTALRM!\n");
	else if(sig == SIGPROF)
	  printf("Receive the SIGPROf!\n");
}

int main()
{
	if(signal(SIGALRM,fun) < 0)
		perror("signal");
	if(signal(SIGVTALRM,fun) < 0)
	    perror("signal");
	if(signal(SIGPROF,fun) < 0)
	    perror("signal");

	struct itimerval new_value1,new_value2,new_value3;
	
	new_value1.it_value.tv_sec = 1;
	new_value1.it_value.tv_usec = 0;
	new_value1.it_interval.tv_sec = 2;
	new_value1.it_interval.tv_usec = 0;

	setitimer(ITIMER_REAL,&new_value1,NULL);
	
	new_value2.it_value.tv_sec = 1;
	new_value2.it_value.tv_usec = 0;
	new_value2.it_interval.tv_sec = 2;
	new_value2.it_interval.tv_usec = 0;

	setitimer(ITIMER_VIRTUAL,&new_value2,NULL);

	new_value3.it_value.tv_sec = 1;
	new_value3.it_value.tv_usec = 0;
	new_value3.it_interval.tv_sec = 2;
	new_value3.it_interval.tv_usec = 0;

	setitimer(ITIMER_PROF,&new_value3,NULL);


	while(1);
	return 0;
}

程式執行結果: