当前位置: 首页 > 面试题库 >

检查errno!= EINTR:这是什么意思?

麹繁
2023-03-14
问题内容

我发现这段代码使用了几次(也使用了类似的代码open()代替write())。

int c = write(fd, &v, sizeof(v));
if (c == -1 && errno != EINTR) {
    perror("Write to output file");
    exit(EXIT_FAILURE);
}

为什么在&& errno != EINTR这里检查?

寻找errno男人 ,我发现关于下面的文字EINTR,但即使我参观man 7 signal不赐教。

EINTR中断函数调用(POSIX.1);参见signal(7)。


问题答案:

EINTR如果在进行系统调用时发生信号,许多系统调用将报告错误代码。实际上没有发生错误,只是因为系统无法自动恢复系统调用,所以才报告这种错误。这种编码模式仅在发生这种情况时重试系统调用,以忽略中断。

例如,如果程序alarm()在计时器用尽时利用异步方式运行某些代码,则可能会发生这种情况。如果在调用程序时发生超时write(),我们只想重试系统调用(又名读/写等)。



 类似资料:
  • 问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的

  • 问题内容: 打电话时我得到一个。这是什么意思?我怎么知道这个意思? 问题答案: 您可以用来获取易于理解的错误号字符串。这是由相同的字符串打印出来的,但是如果您要格式化错误消息而不是标准错误输出,这将很有用。 例如: Linux还支持显式线程安全变体。

  • 问题内容: 我正在为嵌入式Linux系统编写用户应用程序,并且正在使用设备的常用功能,例如打开,关闭,读取,ioctl等。现在,我读到有关EINTR的信息,它表明该功能已被信号中断,但我不确定其中的含义。在我拥有的所有示例程序中,有时都完成了,例如ioctl(),有时没有完成,例如read()。所以,我有点困惑。 何时最好检查EINTR并重复函数调用? 问题答案: 参见sigaction:http

  • 问题内容: 这个头衔看起来并不那么疯狂。我承诺!! 在研究另一个问题时,我在Stack Overflow的样式表中注意到以下内容: 这是一种奇怪的条件样式吗?这是一个错误吗?假设这不是一个错误,那么它适用于所有IE版本吗?有没有一种方法可以指定给定规则仅适用于大于(例如7)的IE版本? 我以前从未遇到过-我一直在使用条件注释来表示IE特定的样式(以及其价值,我宁愿将所有IE特定样式完全分开)。 问

  • 所以我有这行代码。它给了我输出[6,28]。你们知道为什么吗?我不知道有人想打印什么样的数字。

  • 我运行了几个测试场景,其中我从SOAP客户端调用远程系统的SOA服务,并遇到了各种远程异常。你能帮我确定每个错误意味着什么吗- 1) java.net网站。ConnectException:连接被拒绝“ 2)Java . net . socket time out异常:连接超时" 3) 连接异常: 连接超时”