I/O操作上设置超时之alarm闹钟法

环境是Linux Ubuntu系统

调用 alarm,它在指定超时期满时产生SIGALRM信号。这个方法涉及信号处理。

用法:

alarm(time):TIME就是指定的超时期;如果之前设有超时期,alarm()会返回其时期的剩余值;

signal(SIGALARM, connect_alarm):指定connect_alarm函数是时钟期满时的处理函数;

函数退出前要关闭时钟:

Sigfunc   *sigfunc;

sigfunc=signal(SIGALARM, connect_alarm);//保存信号SIGALARM的原始处理函数

alarm(0);//关闭时钟

signal(SIGALARM, sigfunc);//恢复SIGALARM信号的原始处理函数

循环开启闹钟和关闭闹钟:

Sigfunc   *sigfunc;

sigfunc=signal(SIGALARM, connect_alarm);

alarm(2);//以上是开闹钟

for(;;){

if(A==terminate clock forerver){

alarm(0);

signal(SIGALARM, sigfunc);

}else if(B==turn up the clock again){

alarm(0);

sigfunc=signal(SIGALARM, connect_alarm);

alarm(2);

}else

do noting....

}

如果符合条件B的话,闹钟要重新开启,这里要先关了,再重新设置你期望的处理函数,然后再设定时间。如果光是简单的重新设定时间的话,程序再新闹钟超时时会直接跳出for循环,结束程序。因为这是默认处理函数,如果你重设置闹钟时不给予自定义的处理函数,会直接退出函数,后果不可估计的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxfzz.html