我想知道在寫Fortran代碼時如何檢查標準輸出是否已被重定向。因爲我在輸出中添加了編碼以使它們變得豐富多彩,這在發生重定向時不起作用。如果是這樣,編碼應該被禁用。如何檢查輸出是否已在Fortran中重定向?
在此先感謝!
我想知道在寫Fortran代碼時如何檢查標準輸出是否已被重定向。因爲我在輸出中添加了編碼以使它們變得豐富多彩,這在發生重定向時不起作用。如果是這樣,編碼應該被禁用。如何檢查輸出是否已在Fortran中重定向?
在此先感謝!
最簡單的方法,但可能是編譯器特定的,是使用編譯器擴展來訪問isatty()函數(在gfortran中,ISATTY內部函數)。請看下面的代碼
program test_isatty
use iso_fortran_env
write(*, *) isatty(output_unit)
end program test_isatty
對應一個Fortran運行它
$ ./isatty
T
$ ./isatty > foo
$ cat foo
F
如果你的Fortran語言編譯器不具有isatty擴展,但配備了一個擴展來獲得系統文件描述符(FD)單元(在gfortran中,FNUM本徵的),你可以用它來獲得標準輸出單元的FD,然後你可以使用ISO_C_BINDING調用isatty()爲其在FD。
如果@Janneb建議非標準的解決方案並不能吸引我建議將參數傳遞給Fortran程序告訴它向何處發送輸出。程序然後可以確定是否啓用寫入您的編碼。如果您選擇此路線,則可以使用(Fortran 2003)內部子程序get_command_argument
。
非常感謝!我曾想過這樣的解決方案(即使在名單中),但我更喜歡在可能的情況下進行自然切換。稍後我會嘗試'get_command_argument'。 –
我試圖在Ubuntu'isatty'與gfortran 4.6.3,和它運作良好。但在使用gfortran 4.7.1的Mac上,該程序沒有任何迴應。 –