程序間的通訊(三)
阿新 • • 發佈:2018-12-24
編寫程式完成以下功能:
呼叫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; }
程式執行結果: