Книга: Разработка приложений в среде Linux. Второе издание
11.3.1. Поиск информации inode
11.3.1. Поиск информации inode
В начале этой главы информационный узел файла (inode) был представлен как структура данных, которая отслеживает информацию о файле, независимо от представления ее для процесса. Например, размер файла является константой в любой момент времени — он не изменяется для разных процессов, которые имеют доступ к этому файлу (сравните это с текущей позицией в файле, которая уникальна для каждого вызова open()
, а не свойство самого файла). Linux предлагает три способа чтения информации inode.
#include <sys/stat.h>
int stat(const char *pathname, struct stat *statbuf);
int lstat (const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
Первая версия, stat()
возвращает информацию inode
для файла, на который осуществляется ссылка через pathname
, следуя всем символическим ссылкам, которые она представляет. Если вы не хотите следовать символическим ссылкам (например, чтобы проверить, не является ли само имя такой ссылкой), то используйте вместо этого lstat()
. Последняя версия, fstat()
, возвращает inode
, на который ссылается текущий открытый файловый дескриптор. Все три системных вызова заполняют структуру struct stat
, на которую указывает параметр statbuf
, информацией о файловом inode. В табл. 11.3 описана информация, доступная в struct stat
.
Таблица 11.3. Члены структуры struct stat
Тип | Поле | Описание |
---|---|---|
dev_t |
st_dev |
Номер устройства, на котором находится файл. |
ino_t |
st_ino |
Номер файлового on-disk inode. Каждый файл имеет номер on-disk inode, уникальный в пределах устройства, на котором он расположен. То есть пара (st_dev , st_ino ) представляет собой уникальный идентификатор файла. |
mode_t |
st mode |
Режим файла. Сюда включена информация о правах доступа и типе файла. |
nlink_t |
st_nlink |
Количество путевых имен, ссылающихся на данный inode. Сюда не включаются символические ссылки, потому что они ссылаются на другие имена, а не на inode. |
uid_t |
st_uid |
Идентификатор пользователя, владеющего файлом. |
gid_t |
st_gid |
Идентификатор группы, владеющей файлом. |
dev_t |
st_rdev |
Если файл — символьное или блочное устройство, это задает старший (major) и младший (minor) номера файла. Чтобы получить информацию о членах и макросах, которые манипулируют этим значением, обратитесь к обсуждению mknod() далее в этой главе. |
off_t |
st size |
Размер файла в байтах. Это определено только для обычных файлов. |
unsigned long |
st_blksize |
Размер блока в файловой системе, хранящей файл. |
unsigned long |
st_blocks |
Количество блоков, выделенных файлу. Обычно st_blksize * st_blocks — это немного больше, чем st_size , потому что некоторое пространство в конечном блоке не используется. Однако для файлов с "дырками" st_blksize * st_blocks может быть заметно меньше, чем st_size . |
time_t |
st_atime |
Время последнего доступа к файлу. Обновляется при каждом открытии файла или модификации его inode. |
time_t |
st_mtime |
Время последней модификации файла. Обновляется при изменении данных файла. |
time_t |
st_ctime |
Последнее время изменения файла или его inode, включая владельца, группу, счетчик связей и так далее. |
- 5 Поиск информации
- 11.3. Запрос и изменение информации inode
- Сохранение информации о пользователях при миграции
- При копировании с жесткого диска на «флэшку» иногда появляется сообщение о дополнительной присоединенной информации, кот...
- Сохранение информации из Интернета
- 1.2. Определение количества информации. Единицы измерения количества информации
- 1.2. Понятие информации. Общая характеристика процессов сбора, передачи, обработки и накопления информации
- 1.4. Кодирование информации
- 7.4. Модель системы автоматизированного проектирования защиты информации
- 13.3.4. Поиск и замена текста
- Источники информации о конкурентах
- Фильтры и поиск