我正在使用管道读取父进程发送的数据。父进程关闭读取端并在管道的写入端写入数据。同样,child 关闭写端并从读端读取数据。
但在我的情况下,读取返回的"-1"
是错误值。我应该如何发现EAGAIN, EBADF, EIO
读取调用中发生了哪个错误(如)?谢谢
我应该如何发现读取调用中发生了哪个错误(如 EAGAIN、EBADF、EIO)?
打印errno
。更好的选择是perror
在通话后立即执行 , 。
if (read(...) < 0)
perror("read");
或者strerror
,如果您需要自己获取消息,请使用:
printf("%s\n", strerror(errno));
#include <errno.h>
请注意,如果您直接使用,则需errno
要这样做。
如果您使用 linux,则以下代码将打印相关的错误消息作为字符串:
printf("%s", strerror(errno));
一个不可移植的 glibc 扩展,简单地尝试: printf( "%m" );