#include<stdlib.h>
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include "math.h"
void fun_ctrl_c();
void fun_ctrl_z();
void fun_ctrl_d();
int main()
{
int i;
sigset_t set, pendset;
struct sigaction action;
(void) signal(SIGINT, fun_ctrl_c);
(void) signal(SIGTSTP,fun_ctrl_z);
(void) signal(SIGQUIT, fun_ctrl_d);
if (sigemptyset(&set) < 0)
perror("初始化信號集合錯誤");
if (sigaddset(&set, SIGQUIT) < 0)
perror("Ctrl+\");
if (sigaddset(&set, SIGTSTP) < 0)
perror("Ctrl+Z加入信號集合錯誤");
if (sigprocmask(SIG_BLOCK, &set, NULL) < 0)
perror("往信號阻塞集增加壹個信號集合錯誤");
else
{
for (i = 0; i < 10; i++) {
printf("Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號\n ");
sleep(3);
}
}
if (sigprocmask(SIG_UNBLOCK, &set, NULL) < 0)
perror("從信號阻塞集刪除壹個信號集合錯誤");
}
void fun_ctrl_d()
{
int i,j,n;
printf("\t妳按了Ctrl+\是不是很長時間沒理妳?\n");
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(100.0*rand()/(RAND_MAX+2.0));
把隨機數函數換了(實在不會換的換數字)
printf(" %d ",j);
}
printf("\n");
for(n=0;n<4;n++)
printf("\t正在處理Ctrl+\信號處理函數 \n");
}
void fun_ctrl_z() /*自定義信號處理函數 */
{
int n ;
printf("\t妳按了Ctrl+Z 系統是不是很長時間沒理妳?\n");
int i,j;
for(i=0;i<6;i++)
{
自定義信號處理函數輸出壹幅圖形(自己網上去查代碼)
printf("\n");
}
for(n=0;n<6;n++)
printf("\t正在處理Ctrl+Z信號處理函數 \n");
}
void fun_ctrl_c( ) /*自定義信號處理函數 */
{
int n;
printf("\t妳按了'Ctrl+C' 系統及時地處理了此信號處理函數\n");
for(n=0;n<2;n++)
printf("\t正在處理Ctrl+C信號處理函數 \n");
}
編譯:[root@localhost root]# vi 4.c
運行:[root@localhost root]# gcc -o 4 4.c
[root@localhost root]# ./4
顯示結果:
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
Ctrl+\ ?trl+Z信號處理處於阻塞狀態,能及時處理'Ctrl+C'信號
妳按了Ctrl+Z 系統是不是很長時間沒理妳?
自定義信號處理函數輸出壹幅圖形(把這幅圖輸出)
正在處理Ctrl+Z信號處理函數
正在處理Ctrl+Z信號處理函數
正在處理Ctrl+Z信號處理函數
正在處理Ctrl+Z信號處理函數
正在處理Ctrl+Z信號處理函數
正在處理Ctrl+Z信號處理函數