gpt4 book ai didi

linux - 哪些 read(2) 错误是不可恢复的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:50 26 4
gpt4 key购买 nike

man page for read(2)列出调用 read 时可能发生的许多错误。其中一些是良性的,例如 EAGAIN。有些显然是不可恢复的,例如EBADFEFAULT。还有一些更模糊,例如 EIOEINTR。但是,手册页没有断言哪些错误是不可恢复的,哪些只是小问题。是否可以将所有错误归类为 fatal error 或重要错误?

posix specification for read()读起来与 linux 手册页非常相似。它还添加了:

There are no references to actions taken following an "unrecoverable error". It is considered beyond the scope of this volume of POSIX.1-2008 to describe what happens in the case of hardware errors.

在讨论 POSIX 系统时,是否有关于在常见错误情况下应该做什么的文献,尽管此类操作不严格在范围内?编写可移植代码时是否有任何额外的注意事项?

最佳答案

这些有点依赖于上下文:

  • EAGAIN 只发生在非阻塞文件描述符上。除非您设置了非阻塞标志,否则您可以将它与其他事件一起视为致命事件,因为它不应该发生。
  • EINTR 只有当您的进程收到一个它没有忽略的信号并且该进程仍然存在时才会发生。为此,您需要设置一个信号处理程序。除非你这样做了,否则将其视为致命的。

你提到的其他人也是致命的:

  • EIO 很可能是硬件问题。
  • EBADF 是您程序中的一个问题:您传递了一个无效的文件描述符。
  • EFAULT 也是您程序中的一个问题:您传递了一个无效的缓冲区地址。

简而言之:除非您执行异步 I/O 和信号处理等特殊操作,否则您可以将所有错误都视为 fatal error 。

关于linux - 哪些 read(2) 错误是不可恢复的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37312411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com