Поле | Значение |
---|---|
mode_t st_mode | Тип файла и права доступа |
ino_t st_ino | Номер inode. Поля st_ino и st_dev однозначно определяют обычные файлы |
dev_t st_dev | Номер устройства, на котором расположен файл (номер устройства файловой системы) |
dev_t st_rdev | Для специального файла устройства содержит номер устройства, адресуемого этим файлом |
nlink_t st_link | Число жестких связей |
uid_t st_uid | Идентификатор пользователя-владельца файла |
gid_t st_gid | Идентификатор группы-владельца файла |
off_t st_size | Размер файла в байтах. Для специальных файлов устройств это поле не определено |
time_t st_atime | Время последнего доступа к файлу |
time_t st_mtime | Время последней модификации данных файла |
time_t st_ctime | Время последней модификации метаданных файла |
long st_blksize | Оптимальный размер блока для операций ввода/вывода. Для специальных файлов устройств и каналов это поле не определено |
long st_blocks | Число размещенных 512-байтовых блоков хранения данных. Для специальных файлов устройств это поле не определено |
Для определения типа файла служат следующие макроопределения, описанные в файле
Таблица 2.16. Определение типа файла
Макроопределение | Тип файла |
---|---|
S_ISFIFO(mode) | FIFO |
S_ISCHR(mode) | Специальный файл символьного устройства |
S_ISDIR(mode) | Каталог |
S_ISBLK(mode) | Специальный файл блочного устройства |
S_ISREG(mode) | Обычный файл |
S_ISLNK(mode) | Символическая связь |
S_ISSOCK(mode) | Сокет |
Все значения времени, связанные с файлом (время доступа, модификации данных и метаданных) хранятся в секундах, прошедших с 0 часов 1 января 1970 года. Заметим, что информация о времени создания файла отсутствует.
Приведенная ниже программа выводит информацию о файле, имя которого передается ей в качестве аргумента:
#include
#include
#include
main(int argc, char *argv[]) {
struct stat s;
char* ptype;
lstat(argv[1] , &s); /* Определим тип файла */
if (S_ISREG(s.st_mode)) ptype = "Обычный файл";
else if (S_ISDIR(s.st_mode)) ptype = "Каталог";
else if (S_ISLNK(s.st_mode)) ptype = "Симв. Связь";
else if (S_ISCHR(s.st_mode)) ptype = "Симв. Устройство";
else if (S_ISBLK(s.st_mode)) ptype = "Бл.устройство";
else if (S_ISSOCK(s.st_mode)) ptype = "Сокет";
else if (S_ISFIFO(s.st_mode)) ptype = "FIFO";
else ptype = "Неизвестный тип";
/* Выведем информацию о файле */
/* Его тип */
printf("type = %s\n", ptype);
/* Права доступа */
printf("perm =%o\n", s.st_mode & S_IAMB);
/* Номер inode */
printf("inode = %d\n", s.st_ino);
/* Число связей */
printf("nlink = %d\n", s.st_nlink);
/* Устройство, на котором хранятся данные файла */
printf("dev = (%d, %d)\n", major(s.st_dev), minor(s.st_dev));
/* Владельцы файла */
printf("UID = %d\n", s.st_uid);
printf("GID = %d\n", s.st_gid);
/* Для специальных файлов устройств - номера устройства */
printf("rdev = (%d, %d)\n", major(s.st_rdev),
minor(s.st_rdev));
/* Размер файла */
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии