Системный вызов 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, поэтому вы не можете просто взять его для своих собственных целей, и, если это домашнее задание, ваш преподаватель почти наверняка подведет вас, если вы превратитесь во что-то, похожее на это.