1

如何打印作为无符号字符获取的 inode 位图的位?这是我用于获取位图的代码。我想做的是以二进制格式打印位图。

#include <cstdlib>
#include <ext2fs/ext2fs.h>
#include <linux/fs.h>
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <fcntl.h>

using namespace std;

int main() {
    int fd, block_size;
    char boot[1024];
    struct ext2_super_block super_block;
    fd = open("/dev/sda6", O_RDONLY);
    printf("Error: %s\n", strerror(errno));

    /* Reads the boot section and the superblock */
    read(fd, boot, 1024);
    read(fd, &super_block, sizeof (struct ext2_super_block));

    if (super_block.s_magic != EXT2_SUPER_MAGIC) {
        fprintf(stderr, "Not an Ext2 filesystem!\n");
        getchar();
        exit(1);
    }

    /* Prints the Magic Number */
    //    printf("%x\n", super_block.s_magic);

    printf("%x\n", super_block.s_log_block_size);
    block_size = 4096 << super_block.s_log_block_size;

    /* calculate number of block groups on the disk */
    unsigned int group_count =
            1 + (super_block.s_blocks_count - 1) / super_block.s_blocks_per_group;
    /* calculate size of the group descriptor list in bytes */
    unsigned int descr_list_size =
            group_count * sizeof (struct ext2_group_desc);
    struct ext2_group_desc group_descr;

    /* position head above the group descriptor block */
    lseek(fd, 1024 + block_size, SEEK_SET);
    read(fd, &group_descr, sizeof (group_descr));
    /* location of the super-block in the first group */
#define BASE_OFFSET 1024
#define BLOCK_OFFSET(block) (BASE_OFFSET + (block-1)*block_size)

    struct ext2_super_block super;
    struct ext2_group_desc group;
    unsigned char *bitmap, bits[8];
    /* the super block */
    /* the group descritopr */
    /* ... [read superblock and group descriptor] ... */
    bitmap = (unsigned char*) malloc(block_size);
    /* allocate memory for the bitmap */
    lseek(fd, BLOCK_OFFSET(group.bg_block_bitmap), SEEK_SET);
    read(fd, bitmap, block_size);
    /* read bitmap from disk */
    unsigned char* bla = (unsigned char*) bitmap;
    printf("bitmap: ");
    for (int i = 0; i < block_size; i++) {
        printf("%x", &bitmap[i]);
    }
    free(bitmap);

    printf("%x\n", block_size);

    close(fd);

    return 0;
}

我对这段代码有点怀疑。我如何确定结果。我在 ubuntu 12.4 ex4 文件系统上运行它。

编辑:我制作了一个原始磁盘映像并尝试读取它,但得到它不是 EXtended2 文件系统的错误?这是我使用的地址:

fd = open("/dev/zero", O_RDONLY);
4

0 回答 0