2

アプリケーションで接続されているペンドライブのファイルシステムを検出するには、Linux でシステム コールを見つける必要があります。「fdisk -l」が機能することがわかりましたが、これがどのように発生するかを知る必要があります。私は fdisk コードの読み取りを発見できませんでした。唯一の確かな考えは次のとおりです。

  1. 構造体 statfs または statvfs は使用されません。
  2. fdisk は、ファイルシステムを見つけるためにデバイスをマウントする必要はありません。

Obs: 私のアプリケーションは C++ で書かれており、組み込み Linux システムで実行されています。

4

2 に答える 2

2

コマンド fdisk -l は、システム IDバイトで表されるファイル システムを表示します。このバイトは、マスター ブート レコード (MBR) 内のパーティション テーブルにあります。MBR は通常、最初のハード ドライブの最初のシリンダーに格納されます (ただし、どのハード ドライブにも MBR を含めることができます)。

プログラムを実行しているユーザーにアクセス許可があると仮定すると、open および read システム コールを使用してディスクから MBR を読み取ることができると思います。

char buf[446];
int fd = open("/dev/hda", O_RDONLY);
read(fd, buf, 446);

MBRフォーマットを確認し、パーティション テーブルを読み取ってシステム ID バイトを取得します。システム ID バイトのタイプのリストを次に示します。

Linux で fdisk がどのように機能するかを知っているだけで、前回確認したときは、GPT やその他のパーティショニング フォーマットをサポートしていませんでした。したがって、この回答は従来の MBR 形式にのみ関連しています。

于 2012-09-19T22:38:14.583 に答える
1

これを行うには、 util-linux のlibblkidを使用できます。ソース ディストリビューションには、ファイル システムの種類を含む、指定されたデバイス上のパーティションを一覧表示するサンプルが含まれています。

于 2012-09-19T22:04:50.270 に答える