如果你有先見之明寫沿
write(write_unit,*) stuff_to_write
行所有write
聲明這將是非常簡單的,你可以簡單地連接到write_unit
文件而不是stdout
。我想你已經知道,或者你不會問這個問題。如果您write
語句的形式爲
write(*,*)
或
print *
那麼你或許可以重定向輸出從編譯器的幫助不大。例如,英特爾Fortran會將指向*
的輸出發送到控制檯,除非程序發現自己在變量FOR_PRINT
設置爲某個文件或其他文件的名稱的環境中執行,在這種情況下,write(*,*)
將寫入該文件。我希望其他編譯器具有類似的功能。
如果你的代碼的預期使用
write(6,*)
該單位6點stdout
你可以在一個文件
open(unit = 6, file = 'stdout_redirect', status = 'new')
打開單元6對於任何更多你最好告訴我們,你寫語句看起來像你正在使用的編譯器。
編輯
在OP的編輯問題後。這是一個評論比答案更多,但我很囉嗦......
不幸的是,從可移植性的角度來看,許多Fortran程序與底層計算機系統的交互沒有在標準中定義。你的問題在哪裏輸出發送到單位*
去是一個例子;最新的(2008)標準指出,它必須與內在模塊iso_fortran_env
中的命名常量output_unit
確定的單位相同。但是它並沒有說到stdout
(在沒有stdout
的系統上已經有很多Fortran實現),並且它沒有指定如何重定向該輸出,或者即使可以這樣做。輸出重定向是平臺問題,而不是Fortran。正如我們發現英特爾Fortran可以使用環境變量重定向輸出,顯然Cray Fortran不能。
最新標準完全沒有提到文件描述符的主題,我不確定它是Fortran已知的概念。
對於I/O使用*
實質上是說它取決於編譯器/運行時系統,輸入來自輸出並轉到輸出。如果你想要可移植性,你必須控制並使用特定的單元標識。就我個人而言,我認爲你應該在下面的評論中採納@喬治的建議。
至於你添加的問題 - 你嘗試這個時發現了什麼? – 2014-09-23 05:29:53
那麼,我發現的是非常不相關的,因爲我需要可移植性和可移植性由標準來保證。我可能需要知道如何根據fortan標準處理文件描述符,但我不確定這些影響可能是什麼。不過,你應該得到一個答案......是的,它的工作。所有後續輸出按預期重定向到文件。 – Spiros 2014-09-23 07:58:31