【问题标题】:To find the error returned by read()查找 read() 返回的错误
【发布时间】:2013-02-28 06:59:10
【问题描述】:

我正在使用管道读取父进程发送的数据。 父进程关闭读取端并在管道的写入端写入数据。同样,child关闭写端,从读端读取数据。

但在我的情况下,读取返回了"-1",这是错误值。 我应该如何发现读取调用中发生了哪个错误(如 EAGAIN, EBADF, EIO )? 谢谢

【问题讨论】:

  • 不骗人,因为问题不在于errno 的值是什么意思,而是read() 返回的-1 指示的错误原因存储在哪里。

标签: c ipc pipe


【解决方案1】:

我应该如何发现,哪个错误(如 EAGAIN、EBADF、EIO)有 是否发生在读取调用中?

打印errno。更好的选择是在通话后立即发送perror

if (read(...) < 0)
    perror("read");

如果您需要自己获取消息,请使用strerror

printf("%s\n", strerror(errno));

请注意,如果您直接使用errno,则需要#include &lt;errno.h&gt;

【讨论】:

  • 或者使用strerror获取错误信息。
  • @JoachimPileborg 好电话。
【解决方案2】:

如果您使用 linux,以下代码将打印相关的错误消息作为字符串:

printf("%s", strerror(errno));

【讨论】:

    【解决方案3】:

    一个不可移植的 glibc 扩展,简单试试:printf("%m");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多