zoukankan      html  css  js  c++  java
  • linux alarm函数解除read write等函数的阻塞

      看到apue的第十章,说到alarm,pause可以实现sleep,可以让某些一直阻塞的函数超时,例如read,write。代码如下:

     1 static void sig_alrm(int signo)
     2 {
     3     printf("I'm just print from sig_alrm
    ");
     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函数阻塞可被信号中断。

  • 相关阅读:
    c++ set unordered_set区别
    LeetCode 213. 打家劫舍 II
    LeetCode 152. 乘积最大子序列
    [HAOI 2012] 外星人
    [HAOI 2016] 找相同字符
    [ZJOI2007] 仓库建设
    [SCOI 2016] 美味
    [BZOJ 2127] Happiness
    [NOI2009] 植物大战僵尸
    [SDOI 2016] 数字配对
  • 原文地址:https://www.cnblogs.com/thammer/p/5013551.html
Copyright © 2011-2022 走看看