EINTR error
来源:互联网 发布:外国电视台直播软件 编辑:程序博客网 时间:2024/04/19 09:54
EINTR error
总结:本问介绍了EINTR错误产生的原因,以及如何解决,并在最后给出一个实例,通过该实例可以解决调用ioctl产生的EINTR错误。
一. EINTR
1.EINTR错误产生的原因;
当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能会返回一个EINTR错误。例如:在socket服务器端,设置了信号捕获机制,有子进程当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使accept返回一个EINTR错误(被中断的系统调用)。
2.如何解决:
当碰到EINTR错误的时候,可以采取有一些可以重启的系统调用进行重启,而对于有一些系统调用是不能够重启的。例如:accept、read、wiret、seletc、ioctl和open之类的函数来说是可以进行重启的。不过对于套接字编程中的connect函数是不能进行重启的。若connetct函数返回一个EINTR错误的时候,则不能再次调用它,否则将返回一个错误。针对connect不能重启的特性,必须调用select函数来等待连接完成。
补充:慢系统调用(slow system call)
该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回,多数网络支持函数都属于这一类。
二实例
该实例解决了调用ioctl时,产生EINTR的解决方法。
#include <stdio.h>#include <errno.h>/***function name: xioctl*description:*Do ioctl and retry if error was EINTR(“A signal was caught during the ioctl() operation”)*Note:*ENTR:被信号中断函数*/ static int xioctl(int fd,int requrest, void *argp){ int ret; do { ret = ioctl(fd,request,argp);}while(-1 == ret && ENTR==errno);return ret;}}
- EINTR error
- error!=EINTR
- UNIX网络编程--EINTR error
- EINTR错误
- EINTR错误
- EINTR错误
- select EINTR
- EINTR错误
- 关于EINTR
- EINTR错误
- 对EINTR的处理
- EINTR错误的产生
- EINTR 错误码4
- errno!=EINTR
- 对EINTR的处理
- 关于EINTR错误的理解
- waitpid的EINTR错误处理
- EINTR返回值到处理
- C语言深度剖析读书笔记
- C语言之字符串
- android webview上传文件
- 关于内存的一小点总结
- 阿里巴巴2014校招笔试题-2013年9月14日
- EINTR error
- 什么是SEO?SEO能给我们带来什么价值?
- Git基础 3 ---- Git 初始化及仓库创建
- git入门
- EditPlus编辑器也能格式化Java代码
- Matlab编程实现图像增强与去噪
- CKeditor
- 【产生冠军 2094】
- 2014年华为上机题一