[英]FORTRAN to C++ and C++ to FORTRAN Communication
我有一個C ++應用程序和FORTRAN應用程序,它們通過文件進行通信。 (兩個方向)
FORTRAN應用程序正在將數據寫入文件,而C ++正在從文件中讀取數據。 現在出現了一個新要求,其中我必須直接與C ++代碼形式FORTRAN(從FORTRAN到C ++)進行通信(因為文件操作很昂貴)。 我在C ++端實現了套接字,並試圖在FORTRAN端實現了套接字。 我沒有在Internet上獲得有關FORTRAN套接字的足夠信息。
FORTRAN舊代碼是用g77編寫的。 C ++在MFC中。
我知道,我不應該在這個論壇上尋求鏈接。 如果這個問題不屬於這個論壇,我在哪里可以問這種問題?
如果僅是單向通信,則可以使用命名管道,甚至可以使用匿名管道。
與所有進程間通信一樣,有一些陷阱。
最好的選擇是使用未格式化的流。 這是Fortran 2003中引入的一個相對較新的功能,但是所有主要的編譯器都支持它。 因此,請使用
OPEN(20,file="myfifo",access="stream",form="unformatted",status="old",action="write")
並使用諸如
WRITE (20) A
為什么要使用未格式化的流?
首先,未格式化:您寫道,速度很重要。 將數字轉換為十進制然后再次返回將花費大量CPU周期,並且還可能會失去准確性。
其次,流:使用Fortran的無格式I / O的常規實現使用記錄標記-記錄之前的標記顯示記錄的長度,記錄后面的標記顯示相同的信息。
運行時系統如何知道它將要寫入的記錄多長時間? 好吧,事實並非如此。 因此,常見的實現方式是編寫一個虛擬記錄標記,寫入記錄(並了解記錄有多長),寫尾隨標記,查找到第一個標記,覆蓋虛擬記錄標記,然后繼續。 這不適用於命名管道-您無法在此處查找。 如果您仍在緩沖區內,可能會很幸運,但是您不能依賴它。
關於編譯器:如果與舊g77代碼的兼容性成為問題,請使用gfortran。 它支持ACCESS="STREAM"
並具有g77的大多數擴展。 g77很舊,已經有很多年沒有被支持了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.