2012-10-10 30 views
1

我想知道在寫Fortran代碼時如何檢查標準輸出是否已被重定向。因爲我在輸出中添加了編碼以使它們變得豐富多彩,這在發生重定向時不起作用。如果是這樣,編碼應該被禁用。如何檢查輸出是否已在Fortran中重定向?

在此先感謝!

回答

2

最簡單的方法,但可能是編譯器特定的,是使用編譯器擴展來訪問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。

+0

我試圖在Ubuntu'isatty'與gfortran 4.6.3,和它運作良好。但在使用gfortran 4.7.1的Mac上,該程序沒有任何迴應。 –

3

如果@Janneb建議非標準的解決方案並不能吸引我建議將參數傳遞給Fortran程序告訴它向何處發送輸出。程序然後可以確定是否啓用寫入您的編碼。如果您選擇此路線,則可以使用(Fortran 2003)內部子程序get_command_argument

+0

非常感謝!我曾想過這樣的解決方案(即使在名單中),但我更喜歡在可能的情況下進行自然切換。稍後我會嘗試'get_command_argument'。 –

相關問題