簡體   English   中英

每次使用gfortran Fortran 90程序寫入后,如何將輸出刷新到文件?

[英]How do I flush output to file after each write with a gfortran Fortran 90 program?

我在Fortran 90程序中運行一個循環,該循環每次循環將數值輸出到輸出文件。 問題在於輸出沒有保存到文件中,而是保存了很多步驟。 如何獲得沖洗每一步的信息?

示例代碼:

open(unit=1,file='output')

do i = 1, 1000
 write(1,*) i
end do

close(unit=1)

提前致謝。

您需要使輸出無緩沖。 嘗試將GFORTRAN_UNBUFFERED_ALL環境變量設置為“ y”,“ Y”或1。

如果gfortran實現了它,則另一種方法是調用非標准子例程沖洗。 並非所有的編譯器都實現此功能。

當需要沖洗時,只需關閉文件然后重新打開即可。 這既笨拙又緩慢,但是我不知道fortran 90中可以與所有編譯器一起使用的更好方法。

來自“ user152979”的建議非常出色且很有幫助-十年后! 我正在使用MS-DOS Fortran 5.1內置的prgm將程序和數據傳輸到定制的Z80 SBC(單板計算機)。 這個東西是一個小的原型,並且只有串行端口。 為了使其與實驗性奔騰MMX板(運行MS-DOS)一起使用,我需要一個小的讀寫程序。 Fortran符合要求,.EXE則適合軟盤(MMX板上沒有Internet訪問權限)。 但是,如果我寫入COM1端口,則下載到Z80的數據將變得混亂。

事實證明,Fortran正在緩沖數據。 在Z80上,我僅獲得每10條記錄中的一部分。 寫入每個文本記錄后,關閉COM1文件(輸出設備)並重新打開,導致緩沖區被刷新,並且小的Fortran下載器(和Z80 SBC)現在可以正常工作。

因此,即使您的Fortran版本不支持“ FLUSH”運算符,關閉並立即重新打開文件也可以很好地將緩沖區內容刷新到設備上。

關於使用DOS寫入COM1端口的附帶說明:我必須將串行端口RS-232c的CTS引腳捆綁到引腳DTR,DCD和DSR,以便MS-DOS可以“看到”並寫入串行端口。 在更高版本的MS-DOS(即“ Windows”)中,可以使用MODE命令將COM端口RTS和CTS值設置為OFF,但是對於原始DOS,則需要使用烙鐵。 並且,您需要在每次記錄寫入后刷新所有緩沖的數據。 User152979說這種關閉和重新打開是“笨拙且緩慢的”,但就我而言,此技巧非常有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM