2011-10-20 218 views
9

目前,我使用的shell命令行使用非標準系統固有的程序(類似的Fortran 2008 EXECUTE_COMMAND_LINE徵)從我的FORTRAN程序調用:執行命令行並返回命令輸出

CALL SYSTEM(commandStr) 

其中commandStr是包含我要執行的shell命令的字符串。目前,我不知道直接返回commandStr的輸出,但只返回它的返回狀態。所以,我現在正在做的是將輸出寫入文件,然後從Fortran程序中讀取文件。例如:

CALL SYSTEM('sed ''s/,//g'' myFile > dummyFile') 

如果我想從myFile中刪除逗號。然後我使用OPEN和READ來獲取dummyFile的內容。

這工作得很好,但我很關心從磁盤寫入/讀取文件,尤其是如果我在長循環內執行此操作,並且commandStr輸出很大。有沒有辦法將commandStr輸出重定向到我可以直接從Fortran程序訪問的內存緩衝區(而非硬盤)(可能通過特定的UNIT號碼)?

+0

如果輸出很大,將它存儲到文件是否更有意義? – Rook

+0

我想這對代碼沒有什麼影響 - 我唯一擔心的部分是頻繁進出磁盤的I/O影響程序效率。是否有理由將它存儲到文件中,我錯過了什麼? – milancurcic

+1

那麼,從我的觀點來看,這只是一個實際問題。如果數據量不是很多,那麼將其存儲到文件中並不重要。它是大量的數據,我在當前正在運行的程序中重用它,這是我希望它成爲內存的最後一個地方。我需要內存來存儲「解析」該文件的結果,然後對這些文件進行處理。這可能可以更好地解釋,但我認爲你明白了。 – Rook

回答

1

如果這是在POSIX環境中,庫函數popen()也可能可用。

iunit = popen ('sed ''s/,//g'' myFile', 'r') 

查看Fortran環境的文檔,因爲我不確定將I/O連接到Fortran的語義。如果它類似於C運行時庫,則文件連接還需要一個特殊功能來關閉它,pclose()

+1

你可以通過ISO_C_Binding使用Posix的東西,有一個項目涉及到:http://sourceforge.net/projects/fortranposix/ – haraldkl