返回的錯誤我正在讀取由父進程使用管道發送的數據。 父進程關閉讀取結束並在管道的寫入結束寫入數據。同樣,孩子關閉寫入結束並從讀取結束讀取數據。要找到read()
但在我的情況下,讀返回"-1"
這是錯誤值。 我應該如何發現在讀取調用中發生了哪個錯誤(如EAGAIN, EBADF, EIO
)? 感謝
返回的錯誤我正在讀取由父進程使用管道發送的數據。 父進程關閉讀取結束並在管道的寫入結束寫入數據。同樣,孩子關閉寫入結束並從讀取結束讀取數據。要找到read()
但在我的情況下,讀返回"-1"
這是錯誤值。 我應該如何發現在讀取調用中發生了哪個錯誤(如EAGAIN, EBADF, EIO
)? 感謝
我應該如何發現,該錯誤(如EAGAIN,EBADF,EIO)已 已經發生在read調用?
打印errno
。更好的選擇是在呼叫之後立即執行perror
。
if (read(...) < 0)
perror("read");
或者使用strerror
,如果你需要給自己的消息:
printf("%s\n", strerror(errno));
注意,如果你直接使用errno
你需要#include <errno.h>
。
或使用['strerror'](http://en.cppreference.com/w/c/string/byte/strerror)獲取錯誤消息。 – 2013-02-28 07:01:47
@JoachimPileborg良好的通話。 – cnicutar 2013-02-28 07:06:10
如果你使用Linux下面的代碼將打印相關的錯誤消息作爲字符串:
printf("%s", strerror(errno));
非便攜glibc的擴展,嘗試簡單:輸出(「%M」);
可能重複的[如何知道errno的含義?](http://stackoverflow.com/questions/503878/how-to-know-what-the-errno-means) – 2013-02-28 07:02:03
沒有重複的問題不是關於'errno'的值是什麼意思,而是存儲'read()'返回的由'-1'指示的錯誤原因。 – alk 2013-02-28 07:12:19