Сокеты
Сходные по назначению с именованными каналами [58], они управляются системными вызовами межпроцессных взаимодействий (IPC) сокетов, и мы не будем в данной книге иметь с ними дело в других отношениях. В листинге '
ls -ls5.4.2. Получение информации о файле
Три системных вызова возвращают информацию о файлах:
#include <sys/types.h> /* POSIX */#include <sys/stat.h>#include <unistd.h>int stat(const char *file_name, struct stat *buf);int fstat(int filedes, struct stat *buf);int lstat(const char *file_name, struct stat *buf);Функция
stat()stat()lstat()Функция
fstat()Значение, переданное в качестве второго параметра, должно быть адресом
struct stat<sys/stat.h>struct direntstruct statstruct stat { ... dev_t st_dev; /* устройство */ ino_t st_ino; /* индекс */ mode_t st_mode; /* тип и защита */ nlink_t st_nlink; /* число прямых (hard) ссылок */ uid_t st_uid; /* ID владельца */ gid_t st_gid; /* ID группы */ dev_t st_rdev; /* тип устройства (блочное или символьное) */ off_t st_size; /* общий размер в байтах */ blksize_t st_blksize; /* размер блока для ввода/вывода файл, с-мы */ blkcnt_t st_blocks; /* число выделенных блоков */ time_t st_atime; /* время последнего доступа */ time_t st_mtime; /* время последнего изменения */ time_t st_ctime; /* время последнего изменения индекса */ ...};(Размещение на разных системах может быть разное.) Эта структура использует ряд определенных через
typedefst_devУстройство для монтируемой файловой системы. У каждой монтируемой файловой системы уникальное значение
st_devst_inoНомер индекса файла в пределах файловой системы. Пара (
st_devst_inost_modeТип файла и права доступа к нему, закодированные в одном поле. Вскоре мы рассмотрим, как извлечь эту информацию.
st_nlinkЧисло прямых ссылок на файл (счетчик ссылок). Может равняться нулю, если файл был удален после открытия.
st_uidUID файла (номер владельца).
st_gidGID файла (номер группы).
st_rdevТип устройства, если файл является блочным или символьным устройством.
st_rdevst_sizeЛогический размер файла. Как упоминалось в разделе 4.5 «Произвольный доступ: перемещение внутри файла», файл может содержать в себе дыры, в этом случае размер может не отражать истинного значения занимаемого им места.
st_blksize«Размер блока» файла. Представляет предпочтительный размер блока данных для ввода/вывода данных в или из файла. Почти всегда превышает размер физического сектора диска. У более старых систем Unix нет этого поля (или поля
st_blocksstruct statst_blocksЧисло «блоков», используемых файлом. В Linux это значение представлено в единицах 512-байтных блоков. На других системах размер блока может быть различным, проверьте свою локальную страницу справки для stat(2). (Это число происходит от константы
DEV_BSIZE<sys/param.h>Число блоков может быть больше, чем '
st_size / 512st_atimeВремя доступа к файлу; т.е. когда в последний раз читались данные файла.
st_mtimeВремя модификации файла; т е. когда в последний раз данные файла записывались или урезались.
st_ctimeВремя изменения индекса файла. Указывает время последнего изменения служебных данных файла, таких, как права доступа или владелец.
ЗАМЕЧАНИЕ. Поле
st_ctimest_ctime