Есть ли функция C, чтобы получить разрешение на каталог? - PullRequest
0 голосов
/ 12 мая 2009

Я пытаюсь реализовать команду ls в C без использования функции system.

Существует ли функция C для получения прав доступа к каталогу / файлу, чтобы я мог их отобразить?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 12 мая 2009

Системный вызов stat () принимает строку имени файла и возвращает следующую структуру:

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for filesystem I/O */
    blkcnt_t  st_blocks;  /* number of blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

Это одинаково хорошо работает как с записями каталога, так и с файлами, а st_mode - это конкретное поле, которое вы ищете.

Заголовочный файл <sys/stat.h> должен содержать эту структуру и все определения вместе с #defines и / или макросами для интеллектуального декодирования полей (см. здесь для образца).

Если вам интересно, как это действительно делается, вы можете посмотреть исходный код ls в GNU coreutils . Но только используйте это, чтобы обучить себя. Это GPL, поэтому вы не можете просто взять его для своих собственных целей, и, если это домашнее задание, ваш преподаватель почти наверняка подведет вас, если вы превратитесь во что-то, похожее на это.

2 голосов
/ 12 мая 2009

Семейство функций stat (stat(), lstat(), fstat()).

2 голосов
/ 12 мая 2009

Посмотрите на <a href="http://linux.die.net/man/2/stat" rel="nofollow noreferrer">stat()</a>. Похоже, вы работаете в системе Linux или POSIX, так должно быть.

Затем посмотрите на поле st_mode в struct stat, оно содержит информацию о битах защиты, которые часто все вместе называются «режимом» файла (как отражено командой chmod, которая изменяет настройки).

Переход от двоичных битов к текстовому представлению, подобному ls ', ... интересный вызов.

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