Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах

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

Шрифт:

Именованные каналы (named pipes)

Известны также файлы FIFO («first-in first-out» — «первым вошел, первым обслужен»). Эти специальные файлы действуют подобно конвейерам (pipes); данные, записанные в них одной программой, могут быть прочитаны другой; данные не записываются на диск и не считываются с диска. FIFO создаются с помощью команды

mkfifo
; они обсуждаются в разделе 9.3.2 «FIFO». В листинге '
ls -l
' они отображаются первым символом
p
поля прав доступа.

Сокеты

Сходные

по назначению с именованными каналами [58] , они управляются системными вызовами межпроцессных взаимодействий (IPC) сокетов, и мы не будем в данной книге иметь с ними дело в других отношениях. В листинге '
ls -l
' они отображаются первым символом
s
поля прав доступа.

5.4.2. Получение информации о файле

Три системных вызова возвращают информацию о файлах:

58

Именованные каналы и сокеты были разработаны независимо группами Unix System V и BSD соответственно. Когда системы Unix вновь сошлись, обе разновидности файлов стали доступными универсально —- Примеч. автора.

#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
получает сведения об уже открытом файле. Это особенно полезно для дескрипторов файлов 0, 1 и 2 (стандартных ввода, вывода и ошибки), которые уже открыты при запуске процесса. Однако, она может использоваться с любым открытым файлом. (Дескриптор открытого файла никогда не будет относиться к символической ссылке; убедитесь, что понимаете, почему.)

Значение, переданное в качестве второго параметра, должно быть адресом

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
. Для файловых систем Linux ext2 и ext3 это значение составляет 4096.

st_blocks

Число «блоков», используемых файлом. В Linux это значение представлено в единицах 512-байтных блоков. На других системах размер блока может быть различным, проверьте свою локальную страницу справки для stat(2). (Это число происходит от константы

DEV_BSIZE
в
<sys/param.h>
. Эта константа не стандартизована, но довольно широко используется в системах Unix.)

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

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Турнир

Скиба Николай
7. Зверолов
Фантастика:
фэнтези
рпг
уся
фантастика: прочее
попаданцы
6.00
рейтинг книги
Турнир

Чай и водка в истории России

Похлебкин Вильям Васильевич
Дом и Семья:
кулинария
6.25
рейтинг книги
Чай и водка в истории России

Деспот

Арская Арина
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Странники

Измайлова Кира Алиевна
Фантастика:
фэнтези
юмористическая фантастика
8.77
рейтинг книги
Странники

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия

За миллиард лет до конца света (сборник)

Стругацкие Аркадий и Борис
Фантастика:
научная фантастика
8.45
рейтинг книги
За миллиард лет до конца света (сборник)

Достоевский

Гроссман Леонид Петрович
357. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Достоевский

Законник Российской Империи

Ткачев Андрей Юрьевич
1. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Законник Российской Империи

Первый среди равных. Книга IX

Бор Жорж
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IX

Наша навсегда

Зайцева Мария
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Наша навсегда

Большая Советская Энциклопедия (РЫ)

Большая Советская Энциклопедия
Справочная литература:
энциклопедии
5.00
рейтинг книги
Большая Советская Энциклопедия (РЫ)

Гуманитарное знание и вызовы времени

Коллектив авторов
Humanitas
Научно-образовательная:
культурология
5.00
рейтинг книги
Гуманитарное знание и вызовы времени

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X