Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Сокеты
Сходные по назначению с именованными каналами [58], они управляются системными вызовами межпроцессных взаимодействий (IPC) сокетов, и мы не будем в данной книге иметь с ними дело в других отношениях. В листинге '
ls -l
s
5.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 dirent
struct stat
struct 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; /* время последнего изменения индекса */
...
};
(Размещение на разных системах может быть разное.) Эта структура использует ряд определенных через
typedef
st_dev
Устройство для монтируемой файловой системы. У каждой монтируемой файловой системы уникальное значение
st_dev
st_ino
Номер индекса файла в пределах файловой системы. Пара (
st_dev
st_ino
st_mode
Тип файла и права доступа к нему, закодированные в одном поле. Вскоре мы рассмотрим, как извлечь эту информацию.
st_nlink
Число прямых ссылок на файл (счетчик ссылок). Может равняться нулю, если файл был удален после открытия.
st_uid
UID файла (номер владельца).
st_gid
GID файла (номер группы).
st_rdev
Тип устройства, если файл является блочным или символьным устройством.
st_rdev
st_size
Логический размер файла. Как упоминалось в разделе 4.5 «Произвольный доступ: перемещение внутри файла», файл может содержать в себе дыры, в этом случае размер может не отражать истинного значения занимаемого им места.
st_blksize
«Размер блока» файла. Представляет предпочтительный размер блока данных для ввода/вывода данных в или из файла. Почти всегда превышает размер физического сектора диска. У более старых систем Unix нет этого поля (или поля
st_blocks
struct stat
st_blocks
Число «блоков», используемых файлом. В Linux это значение представлено в единицах 512-байтных блоков. На других системах размер блока может быть различным, проверьте свою локальную страницу справки для stat(2). (Это число происходит от константы
DEV_BSIZE
<sys/param.h>
Число блоков может быть больше, чем '
st_size / 512
st_atime
Время доступа к файлу; т.е. когда в последний раз читались данные файла.
st_mtime
Время модификации файла; т е. когда в последний раз данные файла записывались или урезались.
st_ctime
Время изменения индекса файла. Указывает время последнего изменения служебных данных файла, таких, как права доступа или владелец.
ЗАМЕЧАНИЕ. Поле
st_ctime
st_ctime