标签:
看到apue的第十章,说到alarm,pause可以实现sleep,可以让某些一直阻塞的函数超时,例如read,write。代码如下:
1 static void sig_alrm(int signo) 2 { 3 printf("I‘m just print from sig_alrm\n"); 4 } 5 6 int main ( int argc, char *argv[] ) 7 { 8 int n; 9 char buf[32]; 10 11 if ( signal(SIGALRM, sig_alrm) == SIG_ERR ) 12 { 13 perror("signal"); 14 exit (1); 15 } 16 17 alarm(3); 18 if ( (n = read(STDIN_FILENO, buf, 32)) < 0 ) 19 { 20 perror("read"); 21 } 22 alarm(0); 23 write(STDOUT_FILENO,buf, n); 24 return 0; 25 }
编译运行,发现并没有效果,程序依然卡在read处,但是随书源码却可以,经过对比发现,是编译参数不同,我的例子是默认的,但是书上使用了-ansi这个参数进行编译,使用这个参数编译我的代码,就起到了效果,原因暂时不明,也没查到,猜想是-ansi标准的read函数阻塞可被信号中断。
linux alarm函数解除read write等函数的阻塞
标签:
原文地址:http://www.cnblogs.com/thammer/p/5013551.html