2012-11-26 55 views
7

在Linux中,C++中的低級磁盤操作有哪些方法?我試圖在磁盤上寫入自己的數據管理器。例如,我想在Linux環境中創建一個C++程序,該程序在磁盤上分配一定數量(連續的),然後自由地允許我讀取/寫入該數據塊。我不認爲我想用標準fstream::open,因爲這個文件是由OS管理的,我可能沒有在磁盤上獲得連續的部分。C++的Linux下的低級別磁盤操作

謝謝。

+1

很多東西在這裏:http://bit.ly/V2ruze – soulseekah

回答

4

通常,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++,我假設你正在編寫一個用戶程序,而不是一個設備驅動程序。真正的「低級」磁盤操作僅在內核中可用。實際上,如果你想寫一個設備驅動程序,請重新提出你的問題來說明問題。

+2

只要確保它是正確的設備,用這個寫入系統分區並不是一個好主意。在大多數情況下也需要root訪問權限(原因很明顯)。 – josefx

+0

@josefx - 謝謝。剽竊。 –

+1

Thanks @Robᵩ,我正在嘗試編寫一個數據庫管理系統(DBMS),因此它不是一個設備驅動程序,而是一個軟件。感謝您的好消息! – Matthew

1

我不知道有任何方式使用標準的Linux文件系統來做到這一點。我認爲你必須有一個單獨的分區,並直接在其dev僞文件(例如/dev/sda2)上執行I/O操作。

-2

您應該使用系統調用。這裏有一個列表:linux system calls

+0

我認爲他是downvoted,因爲該頁是指2.2內核?或者是別的什麼...... –

+0

我把它寫成了一個樣本,我怎麼知道他使用的是哪個內核版本? Linux內核上的大部分系統調用都是相同的。 –

+0

那麼我的公司阻止該網站是「危險的\t經過驗證的欺詐頁面或威脅源」,但可能是系統調用列表根本不是有用的答案。 –