我想隔離一個令人討厭的bug,這會導致我的Linux內核。我將消息打印到stderr,stderr被重定向到日誌文件。有沒有辦法在文件訪問上禁用緩衝?當內核掛起時,我正在丟失緩衝區中的消息。stderr文件;但沒有緩衝
1
A
回答
0
您可以強制刷新緩衝區,使用fflush(stderr);
1
其實,stderr
是默認不緩衝的,但我認爲這只是在C運行時的條款。我們與前已經解決了這個:
fflush (stderr); fsync (fileno (stderr));
(儘管我們實際上它確實給stdout
但同樣的規則也適用 - 實際fflush
可能不適合stderr
是必要的,但也沒有壞處)。
fflush
將C運行時緩衝區刷新到操作系統,fsync
強制寫入磁盤。
請記住,這可能會嚴重影響您的表現。
0
你可以嘗試使用setvbuf
開始你的應用程序時
setvbuf(stderr, NULL, _IONBF, 0);
但是,您將獲得閱讀標準輸入輸出緩衝,但依然有「內核」緩衝問題,即不會消失,除非你FSYNC。但是可能跟蹤用戶空間的內核錯誤並不是最好的方式。
您可以使用串行控制檯並在另一臺機器上獲得輸出嗎?這樣你就可以同時獲得oops和stderr消息。
相關問題
- 1. 文件流沒有緩衝,但部分流緩衝
- 2. 如何將stderr重定向到沒有任何緩衝區的文件?
- 3. HDF5:「文件緩衝區」和「文件緩存」有什麼區別?
- 4. 打開文件時打開沒有暫存緩衝區的emacs
- 5. 什麼讓文件讀取沒有緩衝區如此昂貴?
- 6. 沒有填充接收緩衝區的UDP緩衝區溢出?
- 7. 允許用戶下載文件沒有透露鏈接,沒有緩衝
- 8. 我的緩衝區包含的元素,但沒有被打印
- 9. NetworkStream.CanRead返回true,但緩衝區沒有返回值
- 10. 衝出緩衝區中的文件
- 11. USB鍵盤 - 緩衝文件
- 12. C++緩衝文件讀取
- 13. 協議緩衝區文件?
- 14. 文件IO和緩衝區
- 15. TortoiseSVN的文件標記爲衝突的,但沒有衝突可能是TortoiseMerge
- 16. 有沒有辦法將Linux管道設置爲非緩衝或線路緩衝?
- 17. python IRC緩衝區沒有清除
- 18. 緩衝區沒有正確的行爲
- 19. 播放沒有緩衝區的音頻
- 20. 沒有可用的緩衝空間
- 21. Tomcat沒有刷新響應緩衝區
- 22. 從InputStream讀取沒有緩衝的行
- 23. 是否存在沒有緩衝的OutputStreamWriter?
- 24. fread()沒有寫入緩衝區
- 25. 有沒有辦法爲SWT組件啓用雙緩衝?
- 26. 有沒有人知道Ada插件的協議緩衝區?
- 27. 緩存Facebook和G + js文件,沒有錯誤,但按鍵
- 28. Linux/Perl:除STDOUT和STDERR之外的其他輸出緩衝區?
- 29. 使用stdout和stderr禁用緩衝安全嗎?
- 30. vim:vnew,但接受緩衝區而不是文件名?
有許多文件/庫可以強制執行fflush。也不是stderr已經沒有緩衝?我認爲唯一的問題是文件緩衝區。 – 2010-05-27 08:31:48