Вопрос

Я понимаю, что каталог — это просто файл в Unix, который содержит номера индексных дескрипторов и имена файлов внутри.Как мне на это взглянуть?Я не могу использовать cat или less в каталоге, и открытие его в vi просто показывает мне список файлов... без номеров индексных дескрипторов.

Это было полезно?

Решение

Поскольку это вопрос программирования (он является вопрос программирования, не так ли?), вам следует проверить opendir, readdir и closedir функции.Они являются частью единой спецификации UNIX.

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

А dirent.h файл должен иметь нужную вам структуру и содержать как минимум:

char   d_name[]    name of entry
ino_t  d_ino       file serial number

Видеть здесь для readdir manpage — содержит ссылки на другие.

Имейте в виду, что объем информации о файле, хранящийся в записях каталога для него, минимален.Сам индексный дескриптор содержит данные, которые вы получаете из stat функция, такие вещи, как время, размер, владелец, разрешения и т. д., а также важнейшие указатели на фактическое содержимое файла.

Другие советы

В старые времена — Версия 7, Система III, ранняя Система V — вы действительно могли открыть каталог и прочитать его содержимое в памяти, особенно для старой файловой системы Unix с 2-байтовыми номерами индексных дескрипторов и ограничением размера файла в 14 байт. имя.

Поскольку более экзотические файловые системы стали более распространенными, вместо них пришлось использовать семейство вызовов функций opendir(), readdir(), closedir(), поскольку анализ содержимого каталога становился все более нетривиальным.

Наконец, за последнее десятилетие или около того, дошло до того, что в большинстве систем вы не можете прочитать каталог;вы можете открыть его (в первую очередь для того, чтобы могли работать такие операции, как fchdir()), и вы можете использовать семейство вызовов opendir() для его чтения.

Похоже на stat команда может быть в порядке.Из статьи:

stat /etc/passwd

    File: `/etc/passwd'
    Size: 2911                Blocks: 8 IO    Block: 4096 regular file
    Device: fd00h/64768d      Inode: 324438   Links: 1
    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2008-08-11 05:24:17.000000000 -0400
    Modify: 2008-08-03 05:11:05.000000000 -0400
    Change: 2008-08-03 05:11:05.000000000 -0400
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top