ブロックレベルでext3ファイルシステムにアクセスする最も簡単な方法は何ですか?ファイルや生のバイトは気にせず、一度に1ブロックずつFSを読み取る必要があります。これを行う簡単な方法はありますか(Cで)?それとも、インスピレーションを得るためにソースを調べることができるシンプルなアプリですか?ネット上で使用可能なチュートリアルは見つかりませんでした。カーネルソースに飛び込んでその方法を見つけるのは少し怖いです。
質問する
1392 次
3 に答える
4
シンプルなアプリが必要な場合は、「dd」ユーティリティをご覧になることをお勧めします。私はGNUコアユーティリティの一部として来ています。そのソースはダウンロード可能です。こちらのホームページをご覧ください。
Cコードから同じことを実現したい場合は、以下のコードを参照してください。これがお役に立てば幸いです。:)
#include <stdio.h>
#include <linux/fs.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define SECTOR_NO 10 /*read 10th sector*/
int main()
{
int sector_size;
char *buf;
int n = SECTOR_NO;
int fd = open("/dev/sda1", O_RDONLY|O_NONBLOCK);
ioctl(fd, BLKSSZGET, §or_size);
printf("%d\n", sector_size);
lseek(fd, n*sector_size, SEEK_SET);
buf = malloc(sector_size);
read(fd, buf, sector_size);
return 0;
}
于 2009-11-04T15:54:15.390 に答える
2
はい、e2fsprogsを参照してください。これは、ext2、ext3、およびext4ファイルシステムで何でも(!)実行するために使用できるツールを提供します。また、ライブラリインターフェイスも含まれているため、他のこともできます。
付属のdebugfsを参照してください。開始するだけで十分な場合があります。それ以外の場合は、ヘッダーを確認してコードを記述してください。
于 2009-11-04T14:21:20.367 に答える
1
ディスクデバイスとその中のパーティションは、読み取り(および書き込み)が可能な通常のファイルと同じように動作します。例:
head -c 2048 /dev/sda1 > first_2048_bytes
もちろん、ルートである必要があります。
于 2009-11-04T14:24:23.953 に答える