Чтение файла каталога в C - PullRequest
3 голосов
/ 02 марта 2012

Я пытаюсь написать небольшую программу, чтобы показать мне внутреннее представление каталога в linux (в частности, debian). Идея была в небольшой C-программе, использующей open (".", O_RDONLY), но это, похоже, не дает результата. Программа следующая:

#include <stdio.h>
#include <fcntl.h>

int main(int argc, char** argv)
{
        int fd = open(argv[1],O_RDONLY,0 );
        char buf;

        printf("%i\n",fd);

        while(read(fd, &buf, 1) > 0)

                printf("%x ", buf);


        putchar('\n');
}

Когда я запускаю его на обычных файлах, он работает как положено, но в каталоге, таком как ".", Он не выдает никаких результатов. Значение fd равно 3 (как и ожидалось), но вызов read возвращает -1.

Почему это не работает, и как я могу добиться, чтобы прочитать внутреннее представление?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 02 марта 2012

Для работы с каталогами вам нужно использовать opendir / readdir / closedir.Для получения дополнительной информации прочитайте соответствующие справочные страницы.

Чтобы проверить, соответствует ли имя файла каталогу, сначала необходимо вызвать stat для имени файла и проверить, является ли он каталогом (S_ISDIR(myStatStruc.st_mode)).

2 голосов
/ 02 марта 2012

Каталоги являются специфическим представлением файловой системы и являются частью файловой системы. В extf они представляют собой таблицу пар строка / индекс, в отличие от файлов, в которых есть блоки данных (которые вы читали, используя свой код выше).

Чтобы прочитать специфичную для каталога информацию в C, вам нужно использовать dirent.h. Посмотрите на эту страницу для получения дополнительной информации http://pubs.opengroup.org/onlinepubs/7908799/xsh/dirent.h.html

В системах POSIX системный вызов "stat" выдаст вам всю информацию об индексе в файловой системе (file / directory / etc.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...