2

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

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

4

3 回答 3

4

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

打印errno。更好的选择是perror在通话后立即执行 , 。

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

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

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

#include <errno.h>请注意,如果您直接使用,则需errno要这样做。

于 2013-02-28T07:00:37.037 回答
2

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

printf("%s", strerror(errno));
于 2013-02-28T07:01:33.010 回答
1

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

于 2013-02-28T19:03:18.180 回答