您的位置:首页 > 运维架构 > Linux

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

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

static void sig_alrm(int signo)
{
printf("I'm just print from sig_alrm\n");
}

int main ( int argc, char *argv[] )
{
int n;
char buf[32];

if ( signal(SIGALRM, sig_alrm) == SIG_ERR )
{
perror("signal");
exit (1);
}

alarm(3);
if ( (n = read(STDIN_FILENO, buf, 32)) < 0 )
{
perror("read");
}
alarm(0);
write(STDOUT_FILENO,buf, n);
return 0;
}


编译运行,发现并没有效果,程序依然卡在read处,但是随书源码却可以,经过对比发现,是编译参数不同,我的例子是默认的,但是书上使用了-ansi这个参数进行编译,使用这个参数编译我的代码,就起到了效果,原因暂时不明,也没查到,猜想是-ansi标准的read函数阻塞可被信号中断。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: