首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于信号的,很简单的,但是小弟我不会

2012-05-24 
关于信号的,很简单的,但是我不会C/C++ code#includestdio.h#includesignal.hvoid handler_sigint(int

关于信号的,很简单的,但是我不会

C/C++ code
#include<stdio.h>#include<signal.h>void handler_sigint(int signo){    printf("recv SIGINT\n");}int main(){    signal(SIGINT,handler_sigint);    while(1);    return 0;}


我觉得这个程序很奇怪, 她里面的while循环是干嘛的,可是我把它删了,这个程序就收不到信号直接退出了,她在里面可以接受无线次数的信号,可是它怎么在信号signal的后面,我觉得应该改为

C/C++ code
#include<stdio.h>#include<signal.h>void handler_sigint(int signo){    printf("recv SIGINT\n");}int main(){    while(1)    {        signal(SIGINT,handler_sigint);    }    sleep(50);    return 0;}

上面来那个程序都是运行得到相同的结果,但是对于第一种现象却不理解
我吧第一种里面的while(1)换成sleep(100); 她就只能接受一次信号了


怎么是这样的
感觉很奇怪

[解决办法]
while循环的作用,就是不要你的程序退出去

sleep也就是在100s内退出程序
[解决办法]
signal就是用来设置信号的 (搞清楚程序的功能有些时候查点资料就行了,比在这问快多了)

void (*signal(int sig, void (*func)(int)))(int);
SIGINT发生时,会调用handler_sigint这个函数

所以没必要在while中一直设置信号,设定过了就行了


然后while(1),等待信号的发生

热点排行