2017-04-20 151 views
-1
int fd; 
fd=io->fd.open(filename,O_RDONLY|O_BINARY); 
string_s=strerror(error); 

結果是confusing.fd = 3,而string_s是「沒有這樣的文件或目錄」。 我相信,文件名是所有right.But爲什麼fd是不是-1文件描述符返回錯誤值

+0

如果文件名稱沒問題,爲什麼要fd是-1? – Gerhardh

回答

3

如果一個函數調用不會失敗的errno不確定。在檢查errno之前,您必須檢查功能是否失敗。

+0

如何檢查C語言的開放函數?io-> fd.open只是C的函數。 – user7896331

+1

@ user7896331通過檢查函數是否返回了'-1'。例如。 'if(fd == -1){printf(「%s \ n」,strerror(errno)); }' –

2

errno從來沒有通過任何庫調用清除。該C11 n1570標準草案說以下(7.5p3):

errno的初始線程的值是在程序啓動時零(錯誤的其他線程的初始值是一個不確定的值),但從來沒有通過任何庫函數設置爲零。如果errno的使用沒有記錄在本國際標準中對函數的描述中,則errno的值可以通過庫函數調用設置爲非零值,無論是否存在錯誤。

也就是說,errno與先前失敗的系統調用相比具有非零值; open成功。

您可以隨時設置errno 0明確自己:

errno = 0; 
fd = io->fd.open(filename, O_RDONLY | O_BINARY); 

和成功的庫調用後,應保持0。

相關問題