2011-03-09 80 views
2

我在我的函數庫中有一個以下代碼,我在循環中多次調用它。經過大量的迭代後,我發現open返回-1,它不應該有以前的迭代工作正常。可能是什麼原因。我怎樣才能獲得有關錯誤的更多細節?C++:文件打開調用失敗

int mode; 
if (fileLen == 0) 
     mode = O_TRUNC | O_RDWR | O_CREAT; 
else 
     mode = O_RDWR; 
myFilDes = open (fName, mode, S_IRUSR | S_IWUSR); 

編輯:每次迭代結束後我打電話說庫公開其內部調用close (myFilDes);

+3

如果您每次打開一個新文件而沒有關閉其他文件,那麼您可能只是沒有文件句柄。 – 2011-03-09 14:31:41

+0

你打開''後關閉文件嗎? – 2011-03-09 14:32:26

+0

是的,我每次迭代後關閉 – devnull 2011-03-09 14:33:05

回答

5

PERROR是標準的功能給errno映射到字符串,並打印出來到標準錯誤:

if (myFilDes == -1) 
    perror("Unable to open file: "); 

人錯誤號/人PERROR /人strerror的更多信息。

1

你關閉這些手柄以及一個方法?在開始失敗之前,您是否達到特定數量的公開呼叫?

errno變量應該有關於故障的附加信息。請參閱:http://linux.die.net/man/2/open

+0

每次迭代結束後,我調用一個方法,該庫顯示內部調用close(myFilDes);' – devnull 2011-03-09 14:40:10

+0

如何獲取errno?有我可以打電話的功能嗎? – devnull 2011-03-09 14:44:10

+1

@iJeeves'errno'是一個全球變種。只要使用它作爲任何其他變量。 – RedX 2011-03-09 15:02:32