2015-12-20 30 views
0

我正在從OS文件系統或從我自己的檔案格式在我的遊戲引擎中寫入類到r/w文件。我怎麼可能不可能通過std::fopen()std::fstream"rw""r"模式下打開文件。我已經編寫了一些代碼在Linux上進行測試。這是它:防止在「rw」和「r」同時打開文件

#include <fstream> 
#include <iostream> 
using namespace std; 


int main() 
{ 
    fstream in("file.txt", ios::in | ios::out); 

    if(!in.is_open()) 
    { 
     cout << "Plik nie może być otwarty w trybie rw" << endl; 
     return 1; 
    } 

    cout << "Plik otwarty w trybie rw" << endl; 
    in << ".test."; 
    cout << "Wpisano tekst" << endl; 

    while(1){} 

    return 0; 
} 

/* Drugi plik */ 
/* The second src code */ 


#include <fstream> 
#include <iostream> 
using namespace std; 


int main() 
{ 
    fstream in("file.txt", ios::in); 

    if(!in.is_open()) 
    { 
     cout << "Plik nie może być otwarty w trybie r" << endl; 
     return 1; 
    } 

    cout << "Plik otwarty w trybie r" << endl; 
    cout << in << endl; 

    return 0; 
} 

當我執行的./rw程序和./r某些情況下,./rw已經進入無限循環和./r實例有0代碼終止。

對不起,我的英文。 :)

+0

退房這樣的回答:http://stackoverflow.com/a/839897/19746 – Piskvor

+1

[使用性病的可能重複:fstream的如何拒絕訪問(讀取和寫入)文件](http://stackoverflow.com/questions/839856/using-stdfstream-how-to-deny-access-read-and-write-to-the-file) –

回答

1

你應該「鎖定」的文件中使用lockf()http://man7.org/linux/man-pages/man3/lockf.3.html

+0

但這不是跨平臺的。 – bajos

+0

那麼你在提問中提到了Linux。你需要支持哪些平臺? –

+0

我在標籤中也放了'windows'和'osx'。我會支持儘可能多的平臺。 ;) – bajos

相關問題