在Linux中,C++中的低級磁盤操作有哪些方法?我試圖在磁盤上寫入自己的數據管理器。例如,我想在Linux環境中創建一個C++程序,該程序在磁盤上分配一定數量(連續的),然後自由地允許我讀取/寫入該數據塊。我不認爲我想用標準fstream::open
,因爲這個文件是由OS管理的,我可能沒有在磁盤上獲得連續的部分。C++的Linux下的低級別磁盤操作
謝謝。
在Linux中,C++中的低級磁盤操作有哪些方法?我試圖在磁盤上寫入自己的數據管理器。例如,我想在Linux環境中創建一個C++程序,該程序在磁盤上分配一定數量(連續的),然後自由地允許我讀取/寫入該數據塊。我不認爲我想用標準fstream::open
,因爲這個文件是由OS管理的,我可能沒有在磁盤上獲得連續的部分。C++的Linux下的低級別磁盤操作
謝謝。
通常,Linux中用戶程序「」的「低級別」磁盤操作涉及到打開磁盤特殊設備。在我的計算機上,這些被稱爲「/ dev/sda」或「/ dev/sda4」或甚至「/ dev/disk/by-uuid/2a5150b4-71cb-11e1-b2fe-3b0d270b4e16」。
您應該非常小心選擇設備文件。用這個寫入你的系統分區不是一個好主意。另外,在大多數情況下,打開設備文件需要root權限(出於顯而易見的原因)。
是否使用fstream
的問題是正交的。您可以使用std::fstream
,fopen
甚至open
來打開設備。然後使用任何與您所做的公開操作相匹配的讀取操作。
對於您的具體示例,您可能會重新考慮是否需要此功能。引用Wikipedia,而這又是引述Linux System Administrator Guide:
但是,隨着Linux系統管理員指南指出,「現代的Linux文件系統(S)通過將所有文件中的塊併攏保持碎片在最低限度,即使它們不能存儲在連續的扇區中,有些文件系統,如ext3,可以有效地分配與文件中其他塊最接近的空閒塊,因此不必擔心Linux系統中的碎片。
既然你提到C++,我假設你正在編寫一個用戶程序,而不是一個設備驅動程序。真正的「低級」磁盤操作僅在內核中可用。實際上,如果你想寫一個設備驅動程序,請重新提出你的問題來說明問題。
我不知道有任何方式使用標準的Linux文件系統來做到這一點。我認爲你必須有一個單獨的分區,並直接在其dev
僞文件(例如/dev/sda2
)上執行I/O操作。
您應該使用系統調用。這裏有一個列表:linux system calls
我認爲他是downvoted,因爲該頁是指2.2內核?或者是別的什麼...... –
我把它寫成了一個樣本,我怎麼知道他使用的是哪個內核版本? Linux內核上的大部分系統調用都是相同的。 –
那麼我的公司阻止該網站是「危險的\t經過驗證的欺詐頁面或威脅源」,但可能是系統調用列表根本不是有用的答案。 –
很多東西在這裏:http://bit.ly/V2ruze – soulseekah