在像freopen(file_name,open_mode,stderr)這樣的調用之後,我需要在過程結束之前調用fclose(stderr)還是自動完成? 在此先感謝並對我的英語感到抱歉C - freopen()重定向需要fclose()?
1
A
回答
0
是的,這是一種很好的做法,但並不是絕對必要的,因爲如果您的進程將立即結束,因爲操作系統將在進程死亡時爲您清理所有內容。
2
沒有必要關閉一個打開的流,因爲所有打開的流在程序結束時都關閉,但最好每調用一次fopen
就有一個fclose
。在stderr
的情況下,此流在啓動時已打開(您不必撥打fopen
),因此即使發出一些freopen
調用,我也沒有理由明確關閉它。
2
當一個進程結束時,它的所有句柄都會自動關閉。但是,關閉您獲得的每個手柄的風格很好 - 例如,有人可能想將程序轉換爲庫,或者您可能正在尋找泄漏。無論您致電freopen
並不重要。
但是,在stderr的情況下,情況有點不同。由於您沒有專門打開該流,因此您不應關閉它。它也很有可能被其他你不能控制的組件所使用,例如atexit函數或堆棧粉碎檢測。
+1
關閉任何標準文件(stdin/out/err)是一個相當糟糕的主意。在關閉文件流後,任何對文件流的使用都會導致未定義的行爲,並且有可能您不知道的代碼會在關閉它之後嘗試訪問這些文件(*尤其是* stderr) - 例如,一個庫已經註冊了一個'atexit'處理程序,並在清理代碼時遇到錯誤。 – 2013-04-20 16:55:10
0
當然。並且只需fclose(stderr);
即可。
相關問題
- 1. 使用std :: freopen重定向stderr C++
- 2. 需要重定向幫助
- 3. 重定向需要SSL嗎?
- 4. 我需要301重定向
- 5. 需要了解重定向
- 6. 重定向規則需要
- 7. 需要htaccess的重定向
- 8. .htaccess重定向/重寫幫助需要
- 9. C - 是否需要檢查freopen返回值?
- 10. 當fopen失敗時需要fclose嗎?
- 11. Restful Web服務需要,但需要重定向到SharePoint
- 12. 簡單的shell linux C實現,重定向標準輸出與freopen
- 13. 不需要Apache的重定向行爲
- 14. Linux重定向幫助需要
- 15. htaccess的重定向需要幫助
- 16. 需要將404重定向到主頁。
- 17. 需要重定向的網站
- 18. htaccess 301重定向 - 需要幫助
- 19. Apache不需要的重定向
- 20. htaccess的301重定向模式需要
- 21. 奇怪的301重定向需要.htaccess
- 22. .htaccess重定向代碼需要
- 23. Url重定向幫助需要
- 24. 15k文章需要301重定向
- 25. 需要Apache重定向規則
- 26. Laravel中不需要的重定向
- 27. 過程需要重定向輸入
- 28. Scrapy FormRequest不需要重定向鏈接
- 29. 不需要nginx的重定向到https
- 30. 重定向不需要的GET參數
一般來說,我會同意,除了標準的3流。看到我對phihag答案的評論。 – 2013-04-20 16:55:43
@R。我沒有真正注意到這裏是'stderr'。其實我也不會關閉它。在程序中沒有關聯的'fopen'調用,所以即使有'freopen'調用,我也沒有理由爲'stderr'調用'fclose'。 – ouah 2013-04-20 18:13:43