linux alarm函数解除read write等函数的阻塞
2015-12-02 17:08
218 查看
看到apue的第十章,说到alarm,pause可以实现sleep,可以让某些一直阻塞的函数超时,例如read,write。代码如下:
编译运行,发现并没有效果,程序依然卡在read处,但是随书源码却可以,经过对比发现,是编译参数不同,我的例子是默认的,但是书上使用了-ansi这个参数进行编译,使用这个参数编译我的代码,就起到了效果,原因暂时不明,也没查到,猜想是-ansi标准的read函数阻塞可被信号中断。
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函数阻塞可被信号中断。
相关文章推荐
- linux安装LNMP的资源
- LINUX驱动之SPI子系统之四spi_master的注册流程
- linux工具:ssh---未完
- Linux——琐碎
- Linux- 线程函数如何将返回值传给主线程
- linux如何查看一个进程的堆栈
- linux内核SPI总线驱动分析(一)
- Linux 对文件名进行批量修改
- 自己动手做一个Mini Linux
- linux伙伴算法实现过程分析
- Drbd 安装配置
- Linux(centos6.5)下安装jenkins
- Linux\Windows双系统时间显示不一致问题
- linux开启vsftp服务,使用root权限登录失败解决方法(允许root权限登录).error:“500 OOPS:cannot change directory:/root”
- 如何在linux下安装mysql
- Linux异步IO的简单应用
- linux-3.18内核系统调用
- Linux个人常用命令
- LINUX C语言 DNS
- CentOS7下编译openjdk