linux 信号 中断的系统调用
2016-01-30 18:19
501 查看
apue上提到了低速的系统调用 解释很长很麻烦 第三版 260页
我只是简单的理解为能够发生阻塞并且阻塞时间够长且有可能永远阻塞的系统调用
当这些函数处于阻塞期,恰好捕捉到一个信号,则该系统调用返回出错,起errno设置为EINTR;
而我们希望重启这些函数则出线了这样的代码
again:
if(( n == read(fd,buf,BUFSIZE)) < 0)
{
if(errno == EINTR)
{
goto again:
}
}
然而随着时间的流失,更方便的方法出来了。那就是自启动的系统调用
包括:ioctl read readv write writev wait waitpid
因为这也许会带来问题,所以进程可以控制每个信号中断这些系统调用后,是否重启。具体方式sigaction函数用SA_INTERRUPT宏决定
我只是简单的理解为能够发生阻塞并且阻塞时间够长且有可能永远阻塞的系统调用
当这些函数处于阻塞期,恰好捕捉到一个信号,则该系统调用返回出错,起errno设置为EINTR;
而我们希望重启这些函数则出线了这样的代码
again:
if(( n == read(fd,buf,BUFSIZE)) < 0)
{
if(errno == EINTR)
{
goto again:
}
}
然而随着时间的流失,更方便的方法出来了。那就是自启动的系统调用
包括:ioctl read readv write writev wait waitpid
因为这也许会带来问题,所以进程可以控制每个信号中断这些系统调用后,是否重启。具体方式sigaction函数用SA_INTERRUPT宏决定
相关文章推荐
- selinux权限快速解决
- Linux内核—EXPORT_SYMBOL宏的使用
- Linux中使用sed命令替换字符串小结(转)
- Linux系统下安装ISO文件
- Linux sed 命令详解(转)
- Linux进程间通信(二)FIFO
- centos下MYSQL 没有ROOT用户的解决方法。
- linux 下程序软件包管理(rpm)
- 【Linux入门学习之】vim编辑器---批量注释与反注释
- Linux 用户和用户组的命令
- 再谈 Unlix (Linux, AIX, HPUX) 上 Java 的 java.lang.OutOfMemoryError: unable to create new native thread
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(七)
- Linux下靠谱的获取本机IP的C代码实
- Linux 用户和用户组进阶命令
- 【Linux入门学习之】vi/vim编辑器必知必会
- Linux Related
- grep 命令系列:如何在 UNIX 中根据文件内容查找文件
- Linux - 正则表达式
- Linux启动管理
- CentOS7编译安装mysql-5.6.28和编译参数