Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах

Роббинс Арнольд

Шрифт:

Число блоков может быть больше, чем '

st_size / 512
'; кроме блоков данных, файловая система может использовать дополнительные блоки для хранения размещений блоков данных. Это особенно необходимо для больших файлов.

st_atime

Время доступа к файлу; т.е. когда в последний раз читались данные файла.

st_mtime

Время модификации файла; т е. когда в последний раз данные файла записывались или урезались.

st_ctime

Время изменения индекса файла. Указывает время последнего изменения служебных данных файла, таких, как права доступа или владелец.

ЗАМЕЧАНИЕ. Поле

st_ctime
не является «временем создания»! В системе Linux или Unix нет такой вещи. Часть более ранней документации называла поле
st_ctime
временем создания. Это была вводящая в заблуждение попытка упростить представление служебных данных файла

Тип

time_t
, использованный для полей
st_atime
,
st_mtime
и
st_ctime
, представляет дату и время. Эти относящиеся ко времени значения иногда называют временными метками (timestamps). Обсуждение того, как использовать значение
time_t
, отложено до раздела 6.1 «Время и даты». Подобным же образом типы
uid_t
и
gid_t
представляют номера владельца и группы, которые обсуждаются в разделе 6.3 «Имена пользователя и группы». Большинство других типов не представляют широкого интереса.

5.4.3. Только Linux: указание файлового времени повышенной точности

Ядра Linux 2.6 и более поздние предоставляют в

struct stat
три дополнительных поля. Они предусматривают точность файлового времени до наносекунд:

st_atime_nsec
Наносекундная компонента времени доступа к файлу.

st_mtime_nsec
Наносекундная компонента времени изменения файла

st_ctime_nsec
Наносекундная компонента времени изменения служебных данных файла.

Некоторые другие системы также предоставляют такие поля с повышенной точностью времени, но имена соответствующих членов структуры

struct stat
не стандартизованы, что затрудняет написание переносимого кода, использующего эти времена. (Связанные с этим расширенные системные вызовы см. в разделе 14.3.2 «Файловое время в микросекундах:
utimes
».)

5.4.4. Определение типа файла

Вспомните, что в поле

st_mode
закодированы как тип файла, так и права доступа к нему.
<sys/stat.h>
определяет ряд макросов, которые определяют тип файла. В частности, эти макросы возвращают
true
или
false
при использовании с полем
st_mode
. У каждого описанного ранее типа файла есть свой макрос. Предположим, выполняется следующий код:

struct stat stbuf;

char filename[PATH_МАХ]; /* PATH_MAX из <limits.h> */

/* ... поместить имя файла в filename ... */

if (stat(filename, &stbuf) < 0) {

 /* обработать ошибку */

}

Когда система заполнила

stbuf
, можно вызывать следующие макросы, причем в качестве аргумента передается
stbuf.st_mode
:

S_ISREG(stbuf.st_mode)

Возвращает

true
, если
filename
является обычным файлом.

S_ISDIR(stbuf.st_mode)

Возвращает

true
, если
filename
является каталогом.

S_ISCHR(stbuf.st_mode)

Возвращает

true
, если
filename
является символьным устройством. Устройства вскоре будут обсуждены более подробно.

S_ISBLK(stbuf.st_mode)

Возвращает

true
, если
filename
является блочным устройством.

S_ISFIFO(stbuf.st_mode)

Возвращает

true
, если
filename
является FIFO.

S_ISLNK(stbuf.st_mode)

Возвращает

true
, если
filename
является символической ссылкой. (Это может никогда не вернуть
true
, если вместо
lstat
использовались
stat
или
fstat
.)

S_ISSOCK(stbuf.st_mode)

Возвращает

true
, если
filename
является сокетом.

ЗАМЕЧАНИЕ. В GNU/Linux эти макросы возвращают 1 для

true
и 0 для
false
. Однако, на других системах возможно, что они будут возвращать для
true
вместо 1 произвольное неотрицательное число. (POSIX определяет лишь ненулевое значение в противоположность нулевому). Поэтому всегда следует использовать эти макросы как автономные тесты вместо проверки возвращаемого значения.

/* Корректное использование */

if (S_ISREG(stbuf.st_mode)) ...

/* Heкорректное использование */

if (S_ISREG(stbuf.st_mode) ==1) ...

Наряду с макросами

<sys/stat.h>
предоставляет два набора битовых масок. Один набор для проверки прав доступа, а другой - для проверки типа файла. Мы видели маски прав доступа в разделе 4.6 «Создание файлов», когда обсуждали тип
mode_t
и значения для
open
и
creat
. Битовые маски, их числовые значения для GNU/Linux и смысл приведены в табл. 5.2.

Таблица 5.2. Битовые маски POSIX для типов файлов и прав доступа в

<sys/stat.h>

Маска Значение Комментарий
S_IFMT
0170000 Маска для битовых полей типа файла
S_IFSOCK
0140000 Сокет.
S_IFLNK
0120000 Символическая ссылка
S_IFREG
0100000 Обычный файл.
S_IFBLK
0060000 Блочное устройство.
S_IFDIR
0040000 Каталог.
S_IFCHR
0020000 Символьное устройство.
S_IFIFO
0010000 FIFO.
S_ISUID
0004000 Бит setuid.
S_ISGID
0002000 Бит setgid
S_ISVTX
0001000 «Липкий» (sticky) бит.
S_IRWXU
0000700 Маска для прав доступа владельца.
S_IRUSR
0000400 Доступ на чтение для владельца.
S_IWUSR
0000200 Доступ на запись для владельца.
S_IXUSR
0000100 Доступ на исполнение для владельца.
S_IRWXG
0000070 Маска для прав доступа группы.
S_IRGRP
0000040 Доступ на чтение для группы.
S_IWGRP
0000020 Доступ на запись для группы.
S_IXGRP
0000010 Доступ на исполнение для группы.
S_IRWXO
0000007 Маска для прав доступа остальных.
S_IROTH
0000004 Доступ на чтение для остальных.
S_IWOTH
0000002 Доступ на запись для остальных.
S_IXOTH
0000001 Доступ на исполнение для остальных.
Поделиться:
Популярные книги

Железный Воин Империи II

Зот Бакалавр
2. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Железный Воин Империи II

Дважды одаренный. Том VIII

Тарс Элиан
8. Дважды одаренный
Фантастика:
боевая фантастика
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Дважды одаренный. Том VIII

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Эпоха Опустошителя. Том VII

Павлов Вел
7. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VII

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Тринадцатый XI

NikL
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Тринадцатый XI

Первый среди равных. Книга II

Бор Жорж
2. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга II

Последний Герой. Том 4

Дамиров Рафаэль
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 4

Изменяющий-Механик. Компиляция. Книги 1-18

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18

Точка Бифуркации V

Смит Дейлор
5. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации V

Вагант

Листратов Валерий
6. Ушедший Род
Фантастика:
боевая фантастика
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Вагант

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

Наномашины, сынок! Том 1

Новиков Николай Васильевич
1. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, сынок! Том 1

Последний Паладин. Том 6

Саваровский Роман
6. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 6