在研究強制文件被儘可能快地寫_commit問題,我已經看到下面的代碼塊在幾個地方:與FD()
_commit(outputFile.rdbuf()->fd());
其中OUTPUTFILE是的std :: ofstream的對象。我基本上是做以下幾點:
std::ofstream outputFile;
outputFile.write((char*)blocks, sizeof(blocks));
outputFile.flush();
_commit(outputFile.fd());
outputFile.close();
塊是一個簡單的char數組數組。我正在做的是寫入一個char數組數組來表示一個二進制文件的內容,然後將該數組推送到文件本身。我需要儘可能快地寫入文件,因爲介質的可靠性不如閃存,而且停電的機率非常高。
當我嘗試編譯,我收到關於_commit
行代碼以下錯誤:
error C2039: 'fd' : is not a member of 'basic_ofstream<char,struct std::char_traits<char> >'
我應該如何去獲得的OUTPUTFILE文件描述符,並把它傳遞給_commit?
編輯:我改變了上面的代碼,以反映使用ofstream.fd(),這應該是ofstream的公衆成員。
看一眼'basic_filebuf'類確認它沒有'fd()'成員,所以有人使用非=標準擴展。 –
我想我應該修改我的問題,只是要求獲取outputFile的文件描述符並將其傳遞給_commit。 –
標準C++中沒有這樣的東西,也沒有'_commit'函數。非標準擴展根據定義依賴於編譯器。 –