查找 read() 返回的错误

Posted

技术标签:

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

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

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

【问题讨论】:

How to know what the errno means ?的可能重复 不骗人,因为问题不在于errno 的值是什么意思,而是read() 返回的-1 指示的错误原因存储在哪里。 【参考方案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");

【讨论】:

以上是关于查找 read() 返回的错误的主要内容,如果未能解决你的问题,请参考以下文章

Read.csv返回错误:无法打开连接[重复]

arm6410,linux,c语言,read函数返回-1,错误:bad address

如果iOS应用程序进入后台并返回“nw_read_request_report [C3]接收失败并出现错误”软件导致连接中止“

C语言 write和read语句的基本用法

使用经纬度查找距离的Sql返回错误的距离

read和write函数