我的一些朋友編寫了一個程序,它使用C程序從網絡(UDP)接收數據並使用Matlab來處理收到的數據。兩個文件即'數據文件'和'控制文件'用於在Matlab和C之間進行數據通信。方案如下。在Matlab和C之間共享數據
- C程序從網絡接收數據,如果'控制文件'包含'0',則將接收到的數據寫入'數據文件'中。完全寫入數據後,'控制文件'中的'0'被替換爲'1'。
- Matlab程序連續在'控制文件'中檢查'1',並在'控制文件'中讀取'1'後立即從'數據文件'中讀取數據。在讀取和處理數據後,Matlab在'控制文件'中用'0'代替'1'。
基本上,該方案試圖使用'控制文件'作爲'鎖'來安全地處理'數據文件'中的數據。數據每1毫秒連續收到,處理需要軟實時。
雖然聲稱一切都很完美,但我覺得這裏有點可疑。原則上,我們應該使用類似於信號量的東西來正確鎖定資源....對吧? 這個方案有什麼缺陷?有沒有更好的替代方案?
編輯:現在我看到有人建議在Launch one C++ application from another, and communicate with it
我想確切地知道爲什麼這是一個「髒」技術類似的「快速和骯髒的」技術?它會在所有情況下都成功嗎?
如果在打開文件時鎖定文件,那麼被鎖定的文件在性質上與關鍵區域類似。問題是,這兩個應用程序,C和Matlab,是否都使用打開的文件來鎖定文件。如果兩者都是,那麼如果一個文件打開並且被鎖定,那麼當另一個嘗試打開該文件時,該打開將被拒絕。 –
爲什麼你不直接在MATLAB中執行socket IO? – glglgl
我建議你拋棄整個基於文件的方案。請使用[TCP/UDP/IP工具箱](http://www.mathworks.com/matlabcentral/fileexchange/345-tcpudpip-toolbox-2-0-6)或將C程序移植到MEX文件 – Peter