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, включая владельца, группу, счетчик связей и так далее. |
11.3.2. Простой пример stat()
Рассмотрим простую программу, которая отображает информацию из lstat()
для каждого имени файла, переданного в аргументе. Она иллюстрирует, как использовать значения, возвращенные семейством функций stat()
.
1: /* statsamp.с */
2:
3: /* Для каждого имени файла, переданного в командной строке, отображаем
4: всю информацию, которую возвращает lstat() для файла. */
5:
6: #include <errno.h>
7: #include <stdio.h>
8: #include <string.h>
9: #include <sys/stat.h>
10: #include <sys/sysmacros.h>
11: #include <sys/types.h>
12: #include <time.h>
13: #include <unistd.h>
14:
15: #define TIME_STRING_BUF 50
16:
17: /* Пользователь передает buf (минимальной длины TIME_STRING_BUF) вместо
18: использования статического для функции буфера, чтобы избежать применения
19: локальных статических переменных и динамической памяти. Никаких ошибок
20: происходить не должно, поэтому никакой проверки ошибок не делаем. */
21: char *time String (time_t t, char *buf) {
22: struct tm *local;
23:
24: local = localtime(&t);
25: strftime(buf, TIME_STRING_BUF, '%c', local);
26:
27: return buf;
28: }
29: