2012-04-17 25 views
2

我正在寫(又一個)文件管理器(學習東西:),並有一個愚蠢的/愚蠢的塊。linux - 從/ proc /分區內容到我可以'ls'

在Linux上,爲了枚舉可以包含文件的存儲設備,我相信最好的方法是解析/ proc /分區文件的內容並提取/ dev/sda *條目。 (對吧?)但是,如何將/ dev/sda *映射到我可以通過編程方式探索以獲取目錄內容的東西?我打算使用boost/filesystem,但由於我不能使用ls/dev/sda我假設我無法使用boost來迭代它。

簡介:我怎麼可以轉換/ dev/sda上*的東西,我可以「ls」的

+1

要瀏覽文件系統,需要安裝它。要獲得塊設備(sdXY)到掛載點的映射,請嘗試查看/ etc/mtab文件。 – pmdj 2012-04-17 20:49:16

回答

1

我認爲你錯誤地理解了/dev/sd*實際上對程序的影響。他們是設備不是目錄。您可以使用mount命令告訴操作系統將設備「解釋」爲文件系統,並將其附加到某處(根或其他位置)。這一步使它成爲文件系統某處的「目錄」。因此,除了原始I/O命令(您不想這麼做)之外,請掛載文件系統,然後嘗試並探究它。

這有點像真的打開文件。當你這樣做時,操作系統給你的程序一個字節流,你可以通過它隨機訪問文件。但在磁盤上,該文件實際上可能散佈在整個硬盤驅動器(或任何設備)上。但操作系統正在將它「製作」成一種「很好」的格式,供您透明地處理。訪問目錄/文件列表時,磁盤本身也是如此。

我希望我的例子更明確地說明爲什麼你要做的不像你想象的那麼簡單。

+0

謝謝大家。我從大家那裏學到了一些非常感謝你 – 2012-04-17 21:58:49

1

即興,我會說的mount不帶參數的輸出可能是一個更快的選擇。這應該會顯示已安裝的文件系統和設備,而/ proc會向您顯示所有設備和分區。

1

設備/dev/sda*是塊設備,需要安裝。爲了能夠ls它你需要有一些可以解釋文件系統類型。第一步:識別文件系統類型,在原始代碼中通常有一個頭部代碼在硬盤的第一個分區表中的分區表,這將只是/dev/sda在Linux系統上它會像ext3

接下來你需要編寫或使用一個與該文件系統接口的庫,如果你獲得了Linux的內核源代碼,那麼它有很多用於與普通文件系統接口的API代碼,以及標準POSIX調用的包裝器,這正是你正在尋找的東西對於。諸如lscwd之類的東西使用系統調用來檢索關於已安裝文件系統的信息,該磁盤是塊(或有時是字符)設備,您需要能夠與其通話並使用相同的語言。