进程间的通信(三)

编写程序完成以下功能:

调用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;
}

程序运行结果:

猜你喜欢

转载自blog.csdn.net/Wangguang_/article/details/84938029