2013-02-28 43 views
2

返回的錯誤我正在讀取由父進程使用管道發送的數據。 父進程關閉讀取結束並在管道的寫入結束寫入數據。同樣,孩子關閉寫入結束並從讀取結束讀取數據。要找到read()

但在我的情況下,讀返回"-1"這是錯誤值。 我應該如何發現在讀取調用中發生了哪個錯誤(如EAGAIN, EBADF, EIO)? 感謝

+0

可能重複的[如何知道errno的含義?](http://stackoverflow.com/questions/503878/how-to-know-what-the-errno-means) – 2013-02-28 07:02:03

+1

沒有重複的問題不是關於'errno'的值是什麼意思,而是存儲'read()'返回的由'-1'指示的錯誤原因。 – alk 2013-02-28 07:12:19

回答

4

我應該如何發現,該錯誤(如EAGAIN,EBADF,EIO)已 已經發生在read調用?

打印errno。更好的選擇是在呼叫之後立即執行perror

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

或者使用strerror,如果你需要給自己的消息:

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

注意,如果你直接使用errno你需要#include <errno.h>

+1

或使用['strerror'](http://en.cppreference.com/w/c/string/byte/strerror)獲取錯誤消息。 – 2013-02-28 07:01:47

+0

@JoachimPileborg良好的通話。 – cnicutar 2013-02-28 07:06:10

2

如果你使用Linux下面的代碼將打印相關的錯誤消息作爲字符串:

printf("%s", strerror(errno)); 
1

非便攜glibc的擴展,嘗試簡單:輸出(「%M」);