2012-07-19 127 views
8

我有一個應用程序讀取一組數據文件並執行一些模型計算。該計劃並不需要修改數據文件本身,所以我目前正在與只讀標誌打開它們,如下圖所示:我可以允許多個程序同時讀取同一個文件嗎?

​​

我想在同一運行我的程序的多個實例時間,使用相同的一組數據,但對數據執行不同的計算。我的程序都不需要修改數據文件。由於數據文件非常大,我無法爲每個程序使用單獨的數據副本。

我認爲,因爲我打開具有隻讀權限的文件,兩個程序可能同時讀取同一個文件。相反,我遇到了各種各樣的錯誤,「文件無法打開,因爲它正在被另一個進程使用」。

由於我的開發環境是Windows 7,this question suggests it might be a matter of enabling read sharing。然而,該線程中的所有答案依賴於CreateFile,而我正在處理用stdio.h編寫的遺留代碼。

有沒有一種方法可以使用fopen類的函數同時從文件中讀取多個程序?

+0

我認爲除了使用CreateFile()之外別無他法。問題是如何從句柄中獲得FILE *。 – Paranaix 2012-07-19 18:23:47

+1

你也可以使用std :: ifstream ..畢竟這是標記爲C++? – stijn 2012-07-19 18:25:56

+0

@Paranaix:'_open_osfhandle',然後是'_fdopen'。 – MSalters 2012-07-19 18:39:45

回答

6

如果您可以更改fopen例程,則嘗試將fopen調用替換爲_fsopen,以便共享讀取/寫入。 _fsopen是mscrt特定的。

如果可以使用CreateFile,又不想/重新編寫所有的遺留代碼進行讀寫,你也可以嘗試一個FILE *有WINAPI文件句柄相關聯。使用_open_osfhandleCreateFile返回的文件句柄中獲取文件描述符,然後使用_fdopen從該文件描述符中獲取FILE *