0

USB サム ドライブに EXT2 パーティションがあり、C 関数 open() が -1 以外を返すことができません。

パーティションマネージャーは、パーティションが /dev/sdb2 にあり、私のコードは言う

int fd = open("/dev/sdb2", O_RDONLY);

しかし、デバッグ後、(fd == -1)、私の USB 通知機能は、前後にマウントされていないと言います。

サイドノート:スーパーブロックとブートセクションには値が入力されているようです...

4

2 に答える 2

0

私の質問ではサムドライブを開くコードは正しいですが、プログラムはスーパーユーザーとして実行する必要があります。chmod 777 /dev/sdb2

これがあなたの問題かどうかを確認するには、上記のコードを使用してくださいprintf("Error: %s\n", strerror(errno));

于 2011-07-15T22:53:16.233 に答える
0

開く/dev/sdb2と、親指ドライブのパーティションにアクセスする raw ブロック デバイスが開かれます。これは、パーティションにファイルシステムがある場合、やりたいことではありません。最初にファイルシステムをマウントする必要があります。その後、マウントポイントを介してファイルシステム内のファイルにアクセスできます。ほとんどの Linux システムでは、サム ドライブを差し込むと自動的にマウントmountされます。コマンド ラインで入力すると、マウントされているすべてのファイル システムとそれらがマウントされた場所が表示されます。これにより、おそらく次のような行が表示されます。

/dev/sdb2 on /media/usb type ext2 (...

その場合、サム ドライブのファイル システムのルート ディレクトリに/media/usb/fileアクセスするために開きます。file

自動的にマウントされない場合は、アクセスする前に手動でマウントする必要があります。mountプログラムまたはプログラム内から mount(2) システム コールを使用してマウントできますが、通常はスーパーユーザー権限が必要です。

マウント方法に関係なく、サムドライブを取り外す前に必ずアンマウントして、すべてのデータが書き込まれ、最新であることを確認してください。

于 2011-06-08T23:44:47.233 に答える