执行“sl”命令会出现一个“跑火车”的程序,用以惩罚把“ls”写错的用户。
那它是怎么屏蔽 SIGINT 信号的? 比想象中简单,就一行。
[cc lang=”C”]
// file: sl.c
int main(int argc, char *argv[])
{
int x, i;
for (i = 1; i < argc; ++i) {
if (*argv[i] == '-') {
option(argv[i] + 1);
}
}
initscr();
signal(SIGINT, SIG_IGN); //<-----
noecho();
curs_set(0);
[/cc]
在自己的程序中,也可以加入 signal() 这一行来屏蔽信号,例如
[cc lang="C"]
#include
#include
int main()
{
signal(SIGINT, SIG_IGN);
while(1);
return 0;
}
[/cc]
测试:
[cc lang=”text”]
[root@build ~]# ./test
^C^C^C^C^C^C^C^C^C^C^C
[/cc]
也可以指定一个 Handler 函数,改变接收到信号的行为,例如
[cc lang=”C”]
#include
#include
void print_greeting(int x){
printf(“not allowed.\n”);
}
int main()
{
signal(SIGINT, print_greeting);
while(1);
return 0;
}
[/cc]
[cc lang=”text”]
[root@build ~]# ./test
^Cnot allowed.
^Cnot allowed.
^Cnot allowed.
[/cc]
