2

私は(さらに別の)ファイルマネージャを(何かを学ぶために)書いていて、ばかげた/ばかげたブロックがあります。

Linux でファイルを格納できるストレージ デバイスを列挙するには、/proc/partitions ファイルの内容を解析して /dev/sda* エントリを抽出するのが最善の方法だと思います。(そうですか?)しかし、/dev/sda* をプログラムで調べてディレクトリの内容を取得できるものにマップするにはどうすればよいでしょうか? boost/filesystem を使用する予定ですが、/dev/sda を ls できないため、boost を使用して繰り返し処理することはできないと思います。

概要: /dev/sda* を「ls」できるものに変換するにはどうすればよいですか?

4

3 に答える 3

1

/dev/sd*あなたはプログラムにとって実際に何であるかを正確に誤解していると思います。それらはディレクトリではなくデバイスです。このコマンドを使用してmount、デバイスをファイルシステムとして「解釈」し、どこかに接続するようにオペレーティングシステムに指示します(ルートなど)。ファイルシステムのどこかに「ディレクトリ」を作成するのはこのステップです。したがって、生のI / Oコマンド(実行したくない)以外に、ファイルシステムをマウントしてから、それを調べてみてください。

本当にファイルを開くようなものです。これを行うと、オペレーティングシステムは、ファイルにランダムにアクセスできるバイトのストリームをプログラムに提供します。しかし、ディスク上では、そのファイルは実際にはハードドライブ(または任意のデバイス)全体に散在している可能性があります。しかし、OSは、透過的に処理できるように「適切な」形式に「作成」しています。ディレクトリ/ファイルのリストにアクセスするときのディスク自体についても同じことが言えます。

私の例が、あなたがやろうとしていることがあなたが思っているほど単純ではない理由をより明確にしたことを願っています。

于 2012-04-17T20:54:57.817 に答える
1

簡単に言えば、mount引数なしの出力の方が速い選択かもしれません。これにより、マウントされたファイルシステムとデバイスが表示され、/proc ではすべてのデバイスとパーティションが表示されます。

于 2012-04-17T20:48:12.337 に答える
1

デバイス/dev/sda*はブロック デバイスであり、マウントする必要があります。それを可能にlsするには、ファイルシステムの種類を解釈できるものが必要です。最初のステップ: ファイル システムのタイプを特定します。生のコードでは、通常、ハード ドライブの最初のセグメントのパーティション テーブルにヘッダー コードがあります/dev/sda。Linux システムでは、次のようになります。ext3

次に、そのファイルシステムとインターフェースするためのライブラリを作成または使用する必要があります。Linux 用のカーネル ソース コードを入手した場合は、一般的なファイル システムとインターフェースするための API コードと、標準の POSIX 呼び出しのラッパーが含まれています。を探しています。マウントされたファイルシステムに関する情報を取得するためにシステムコールlscwd使用したり、ディスクはブロック(または場合によってはキャラクター)デバイスであり、それと会話して同じ言語を話す能力が必要です。

于 2012-04-17T20:53:14.450 に答える