struct stat

Подробная информация о файле

Прототип:

#include <sys/stat.h>
struct stat {
#if _FILE_OFFSET_BITS - 0 == 64
ino_t st_ino; /* File serial number. */
off_t st_size; /* File size in bytes. */
#elif !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS == 32
#if defined(__LITTLEENDIAN__)
ino_t st_ino; /* File serial number. */
ino_t st_ino_hi;
off_t st_size;
off_t st_size_hi;
#elif defined(__BIGENDIAN__)
ino_t st_ino_hi;
ino_t st_ino; /* File serial number. */
off_t st_size_hi;
off_t st_size;
#else
#error endian not configured for system
#endif
#else
#error _FILE_OFFSET_BITS value is unsupported
#endif
dev_t st_dev; /* ID of the device containing the file. */
dev_t st_rdev; /* Device ID. */
uid_t st_uid; /* User ID of file. */
gid_t st_gid; /* Group ID of file. */
time_t st_mtime; /* Time of last data modification. */
time_t st_atime; /* Time when file data was last accessed.*/
time_t st_ctime; /* Time of last file status change. */
mode_t st_mode; /* File types and permissions. */
nlink_t st_nlink; /* Number of hard links to the file. */
blksize_t st_blocksize; /* Size of a block used by st_nblocks. */
int32_t st_nblocks; /* Number of blocks st_blocksize blocks. */
blksize_t st_blksize; /* Preferred I/O block size for object. */
#if _FILE_OFFSET_BITS - 0 == 64
blkcnt_t st_blocks; /* No. of 512-byte blocks allocated for a file. */
#elif !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS == 32
#if defined(__LITTLEENDIAN__)
blkcnt_t st_blocks; /* No. of 512-byte blocks allocated for a file. */
blkcnt_t st_blocks_hi;
#elif defined(__BIGENDIAN__)
blkcnt_t st_blocks_hi;
blkcnt_t st_blocks;
#else
#error endian not configured for system
#endif
#else
#error _FILE_OFFSET_BITS value is unsupported
#endif
};

Описание:

Структура stat используется для получения информации о состоянии файла. Поля структуры заполняются вызовами функций stat*() и lstat*(). Структура включает следующие поля:

st_mode
Права доступа. Права доступа к файлу или каталогу указываются в виде комбинации битов в поле st_mode структуры stat. Эти биты определены в <sys/stat.h> и описаны ниже:
Владелец Группа Все прочие Разрешения
S_IRUSR S_IRGRP S_IROTH Чтение
S_IRWXU S_IRWXG S_IRWXO Чтение, запись, исполнение/поиск. Поразрядное исключающее ИЛИ трех констант "всех прочих" (other). S_IRWXU – есть ИЛИ для IRUSR, S_IWSUR и S_IXUSR.
S_IWUSR S_IWGRP S_IWOTH Запись
S_IXUSR S_IXGRP S_IXOTH Исполнение/поиск
Следующие биты определяют прочие права доступа, используемые в других реализациях:
Бит Эквивалент
S_IEXEC S_IXUSR
S_IREAD S_IRUSR
S_IWRITE S_IWUSR
Следующие биты также устанавливаються в поле st_mode:
S_ISUID
Установить идентификатор пользователя при исполнении. Эффективный идентификатор пользователя процесса устанавливается равным идентификатору владельца файла, когда файл запускается как программа. В регулярном файле этот бит должен сбрасываться при любой записи.
S_ISGID
Установить идентификатор группы при исполнении. Установить эффективный идентификатор группы для процесса на группу файла, когда файл запускается как программа. В регулярном файле этот бит должен сбрасываться при любой записи.
Макросы. Для данных типов файлов определены следующие символьные имена для значений st_mode:
S_IFBLK
Блочное устройство.
S_IFCHR
Символьное устройство.
S_IFDIR
Каталог.
S_IFIFO
FIFO.
S_IFLNK
Символическая ссылка
S_IFMT
Тип файла.
S_IFNAM
Файл со специальным именем.
S_IFREG
Регулярный файл.
S_IFSOCK
Сокет.
Следующие макросы необходимы для проверки типа файла. Значение m, передаваемое макросам, является значением поля st_mode структуры stat. Макросы возвращают ненулевое значение, если проверка выполнена успешно, и ноль, если проверка выполнена неуспешно. Указанные далее макросы проверяют, является ли файл:
S_ISBLK( m )
блочным устройством.
S_ISCHR( m )
символьным устройством.
S_ISDIR( m )
каталогом.
S_ISFIFO( m )
FIFO.
S_ISLNK( m )
символической ссылкой.
S_ISNAM( m )
файлом со специальным именем.
S_ISREG( m )
регулярным файлом.
S_ISSOCK( m )
сокетом.
Данные макросы проверяют, принадлежит ли файл указанному типу. Значение аргумента buf, передаваемое в макрос - это указатель на структуру stat. Макрос возвращает ненулевое значение, если указанный объект реализован как отдельный тип файла, и указанный тип файла содержится в указанной структуре stat по указателю buf. В противном случае макрос возвращает ноль.
S_TYPEISMQ( buf )
Проверка очереди сообщений.
S_TYPEISSEM( buf )
Проверка семафора.
S_TYPEISSHM( buf )
Проверка объекта разделяемой памяти.
Данные макросы управляют идентификаторами устройств:
major( device )
Извлечь старший номер из идентификатора устройства.
minor( device )
Извлечь младший номер из идентификатора устройства.
makedev( node, major, minor )
Создать идентификатор устройства из заданных чисел. В настоящее время аргумент node не используется и должен быть равен нулю.
st_rdev
Поле st_rdev структуры stat - это идентификатор устройства, который состоит из:

Классификация:

POSIX 1003.1; Поддержка больших файлов

Тематические ссылки:

iofunc_stat(), fstat(), fstat64(), lstat(), lstat64(), stat(), stat64()




Предыдущий раздел: Описание API системной библиотеки