查找 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 <errno.h>
。
【讨论】:
或者使用strerror
获取错误信息。
@JoachimPileborg 好电话。【参考方案2】:
如果您使用 linux,以下代码将打印相关的错误消息作为字符串:
printf("%s", strerror(errno));
【讨论】:
【参考方案3】:一个不可移植的 glibc 扩展,简单试试:printf("%m");
【讨论】:
以上是关于查找 read() 返回的错误的主要内容,如果未能解决你的问题,请参考以下文章
arm6410,linux,c语言,read函数返回-1,错误:bad address
如果iOS应用程序进入后台并返回“nw_read_request_report [C3]接收失败并出现错误”软件导致连接中止“