C ++での低レベルのディスク操作のために、Linuxにはどのような方法がありますか? ディスクに独自のデータ マネージャーを書き込もうとしています。たとえば、Linux 環境で C++ プログラムを作成して、ディスクに一定量 (連続) を割り当て、そのデータのチャンクを自由に読み書きできるようにしたいと考えています。fstream::open
ファイルはOSによって管理され、ディスク上に連続したセクションが得られない可能性があるため、標準を使用したくないと思います。
ありがとう。
C ++での低レベルのディスク操作のために、Linuxにはどのような方法がありますか? ディスクに独自のデータ マネージャーを書き込もうとしています。たとえば、Linux 環境で C++ プログラムを作成して、ディスクに一定量 (連続) を割り当て、そのデータのチャンクを自由に読み書きできるようにしたいと考えています。fstream::open
ファイルはOSによって管理され、ディスク上に連続したセクションが得られない可能性があるため、標準を使用したくないと思います。
ありがとう。
一般に、Linux のユーザー プログラム1からの「低レベル」のディスク操作には、ディスク スペシャル デバイスのオープンが含まれます。私のコンピューターでは、これらは「/dev/sda」や「/dev/sda4」、さらには「/dev/disk/by-uuid/2a5150b4-71cb-11e1-b2fe-3b0d270b4e16」などの名前で呼ばれています。
デバイスファイルの選択には細心の注意を払う必要があります。これを使用してシステム パーティションに書き込むことはお勧めできません。また、ほとんどの場合、デバイス ファイルを開くには root アクセスが必要です (理由は明らかです)。
使用するかどうかの問題fstream
は直交です。またはを使用std::fstream
してデバイスを開くこともできます。次に、行ったオープンに一致する読み取り操作を使用します。fopen
open
特定の例では、この機能が必要かどうかを再検討することができます。ウィキペディアを引用すると、 Linux システム管理者ガイドが引用されます。
ただし、Linux システム管理者ガイドに記載されているように、「最新の Linux ファイルシステムは、連続したセクターに格納できなくても、ファイル内のすべてのブロックを互いに近づけることにより、断片化を最小限に抑えます。ext3 などの一部のファイルシステムは、ファイル内の他のブロックに最も近い空きブロックを効果的に割り当てます。したがって、Linux システムで断片化を心配する必要はありません。"
1 C++ について言及されているので、デバイス ドライバーではなく、ユーザー プログラムを作成していると思います。真の「低レベル」ディスク操作は、カーネル内でのみ利用できます。実際にデバイス ドライバを作成したい場合は、そのことを明確にするために質問をもう一度述べてください。
標準の Linux ファイルシステムを使用してこれを行う方法を知りません。dev
別のパーティションを作成し、その疑似ファイル (例: ) で直接 I/O を実行する必要があると思います/dev/sda2
。
システムコールを使用する必要があります。ここにリストがあります:Linuxシステムコール