码迷,mamicode.com
首页 > 系统相关 > 详细

linux alarm函数解除read write等函数的阻塞

时间:2015-12-02 18:26:55      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

  看到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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!