2010-08-30 68 views
0

我想用C语言编写unix套接字编程,但是在阅读时出现Err No 4.我无法找到这个错误代码的描述。有人有任何想法吗?读取系统调用

回答

2

如果将开始寻找Unix错误代码名称的最终来源(/usr/include/errno.h),你会在其中包含您的错误代码

#define EINTR   4  /* Interrupted system call */ 

(这是该文件是留给你的文件到达作为练习;))

2

对于不同的系统(甚至不同的类Unix系统),errno的值可能不同,所以应该在代码中使用符号常量。

perror功能将打印出来(到STDERR)最后errno值与您提供的字符串沿着描述字符串。

man 3 perror 

strerror函数返回一个const char *的字符串perror打印。

如果4 EINTR您的系统上,那么你的调用来读取期间接收的信号。有办法防止这种打断你的系统调用,但通常你只需要:

while (1) { 
    ssize_t x = read(file, buf, len); 
    if (x < 0) { 
     if (errno == EINTR) { 
      errno = 0; 
      continue; 
     } else { 
      // it's a real error 
0

如果您收到EINTR,这可能意味着你已经正确安装的信号处理程序。良好的Unix系统将默认为重新启动系统调用时,你只需拨打signal,但为了安全,您应该使用bsd_signal功能(如果可用),或致电sigaction与重新启动的标志,以避免EINTR头痛。