2014-09-10 69 views
2

在C或C++程序中,我可以使用freopen將輸出(即stdout文件描述符)重定向到另一個文件(或放棄將文件描述符重新打開到/ dev/null或另一個接收器)。應該「freopen'ed」標準輸出關閉?

問題是:如果我這樣做,我應該在程序結束執行之前明確地關閉文件描述符嗎?爲什麼?在哪些平臺上?一般情況下,如果我不關閉文件描述符,在這種特定情況下會發生什麼?

回答

4
  1. 我應該在程序結束執行之前明確地關閉文件描述符嗎?

    freopen(3) man page

    freopen()功能打開,其名稱是指向的字符串 由和關聯流指向流與它的文件。原始流(如果存在)已關閉。

    所以不,你不必關閉原來的FILE *。不過,您可能應該關閉從freopen調用中返回的那個。順便說一句 - 這些都是FILE *變量,而不是文件描述符。

  2. 爲什麼?

    因爲文檔說你不必這樣做。

  3. 在哪個平臺上?

    任何正確執行freopen(3)所定義的C標準。

  4. 如果我不關閉文件描述符,通常會發生什麼情況?

    當程序退出時,操作系統清理程序使用的資源。