3

ブロックレベルでext3ファイルシステムにアクセスする最も簡単な方法は何ですか?ファイルや生のバイトは気にせず、一度に1ブロックずつFSを読み取る必要があります。これを行う簡単な方法はありますか(Cで)?それとも、インスピレーションを得るためにソースを調べることができるシンプルなアプリですか?ネット上で使用可能なチュートリアルは見つかりませんでした。カーネルソースに飛び込んでその方法を見つけるのは少し怖いです。

4

3 に答える 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, &sector_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 に答える