我有一個情況,磁盤變滿,我的程序掛起,因爲在標準輸出使用fflush。我已經放下了一小段代碼來模仿這個問題。我們必須將這個程序stdout重定向到一個大小已滿的磁盤上的文件。如何避免在磁盤滿了時掛起stdout掛起?
while(1){
cout << "a big data to be written here";
int ret = fflush(stdout);
if(ret != 0){
cerr << "get error : " << strerror(errno) << endl;
exit(1);
}
}
而這段代碼永遠掛起。我試圖使用fcntl與O_NONBLOCK進行標準輸出。即使這不起作用。請注意,我不能在這裏使用寫入系統調用,儘管這可以避免在磁盤已滿時出現此類掛起問題。由於我的系統在許多地方廣泛使用庫調用,如果我僅在此處使用寫入系統調用,它將以混合方式創建輸出。任何人都可以建議如何避免懸掛? 我試過fsync,fdatasync也是。與這些功能一樣懸而未決。
Update: fcntl fixed this problem even with cout and fflush combination.
這是什麼操作系統?你有沒有嘗試捕獲過程的['strace'](http://linux.die.net/man/1/strace)?此外,不要修復C++的stdio流或原始操作系統級文件訪問的iostreams。 – 2013-05-07 05:26:24
它在unix上。是的,避免混淆,修復這個問題。謝謝 – 2013-05-07 06:44:27