Вход/Регистрация
Linux программирование в примерах
вернуться

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

Шрифт:

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

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

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>

  • Читать дальше
  • 1
  • ...
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: