Число блоков может быть больше, чем 'st_size / 512
'; кроме блоков данных, файловая система может использовать дополнительные блоки для хранения размещений блоков данных. Это особенно необходимо для больших файлов.
st_atime
Время доступа к файлу; т.е. когда в последний раз читались данные файла.
st_mtime
Время модификации файла; т е. когда в последний раз данные файла записывались или урезались.
st_ctime
Время изменения индекса файла. Указывает время последнего изменения служебных данных файла, таких, как права доступа или владелец.
ЗАМЕЧАНИЕ. Поле st_ctime
не является «временем создания»! В системе Linux или Unix нет такой вещи. Часть более ранней документации называла поле st_ctime
временем создания. Это была вводящая в заблуждение попытка упростить представление служебных данных файла
Тип time_t
, использованный для полей st_atime
, st_mtime
и st_ctime
, представляет дату и время. Эти относящиеся ко времени значения иногда называют 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
utimes()
».)
5.4.4. Определение типа файла
Вспомните, что в поле st_mode
закодированы как тип файла, так и права доступа к нему.
определяет ряд макросов, которые определяют тип файла. В частности, эти макросы возвращают true
или false
при использовании с полем st_mode
. У каждого описанного ранее типа файла есть свой макрос. Предположим, выполняется следующий код:
struct stat stbuf;
char filename[PATH_МАХ]; /* PATH_MAX из
/* ... поместить имя файла в 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
является сокетом.