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函数阻塞可被信号中断。

  • 相关阅读:
    Pandas 基础(8)
    Pandas 基础(7)
    Pandas 基础(6)
    Pandas 基础(5)
    Pandas 基础(4)
    python matplotlib 图表局部放大
    python 带小数点时间格式化
    emacs elpy代码补全功能
    spacemacs 初始安装报错
    视频加载logo 2
  • 原文地址:https://www.cnblogs.com/thammer/p/5013551.html
Copyright © 2011-2022 走看看