Чтение растрового изображения Linux Inode

Я собираюсь получить растровые изображения Linux Inode с C ++. Я использую этот код для извлечения суперблока в первую очередь:

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

using namespace std;

/*
*
*/

int main() {
int fd;
char boot[1024];
struct ext2_super_block super_block;

fd = open("/dev/sda1", O_RDONLY);
/* Reads the boot section and the superblock */
read(fd, boot, 1024);
read(fd, &super_block, sizeof (struct ext2_super_block));

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

close(fd);

return 0;
}

но каждый раз, когда я запускаю его, я получаю сообщение об ошибке:

In file included from main.cpp:2:0:
/usr/include/linux/ext2_fs.h:181:18: error: ‘S_ISDIR’ was not declared in this scope
/usr/include/linux/ext2_fs.h:183:23: error: ‘S_ISREG’ was not declared in this scope

Я не мог найти хороший пример или учебник для этого. Есть кто-нибудь, чтобы помочь мне?

РЕДАКТИРОВАТЬ :
Я включаю <linux/stat.h> но все равно получаю ту же ошибку.

0

Решение

#grep -rw S_ISREG /usr/src/linux/include
/usr/src/linux/include/linux/fs.h:  if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
/usr/src/linux/include/linux/fs.h.~1~:  if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
/usr/src/linux/include/linux/stat.h:#define S_ISREG(m)  (((m) & S_IFMT) == S_IFREG)

Так что вы должны найти stat.h в вашем исходном дереве ядра и включить его.

3

Другие решения

Исходный код Linux «stat.h» — это не тот файл, который поставляется с C-библиотекой. Они просто имеют одно и то же имя. Вам нужно будет указать путь включения, чтобы найти правильный stat.h (вам может понадобиться ОБА, в зависимости от того, что вы пытаетесь сделать).

2

По вопросам рекламы [email protected]