Операционная система UNIX
Шрифт:
В качестве аргумента функции принимают имя файла или файловый дескриптор (fstat(2)) и возвращают заполненные поля структуры stat, которые приведены в табл. 2.15.
Таблица 2.15. Поля структуры stat
Поле | Значение |
---|---|
mode_t st_mode | Тип файла и права доступа |
ino_t st_ino | Номер inode.
st_ino и st_dev однозначно определяют обычные файлы |
dev_t st_dev | Номер устройства, на котором расположен файл (номер устройства файловой системы) |
dev_t st_rdev | Для специального файла устройства содержит номер устройства, адресуемого этим файлом |
nlink_t st_link | Число жестких связей |
uid_t st_uid | Идентификатор пользователя-владельца файла |
gid_t st_gid | Идентификатор группы-владельца файла |
off_t st_size | Размер файла в байтах. Для специальных файлов устройств это поле не определено |
time_t st_atime | Время последнего доступа к файлу |
time_t st_mtime | Время последней модификации данных файла |
time_t st_ctime | Время последней модификации метаданных файла |
long st_blksize | Оптимальный размер блока для операций ввода/вывода. Для специальных файлов устройств и каналов это поле не определено |
long st_blocks | Число размещенных 512-байтовых блоков хранения данных. Для специальных файлов устройств это поле не определено |
Для определения типа файла служат следующие макроопределения, описанные в файле <sys/stat.h>:
Таблица 2.16. Определение типа файла
Макроопределение | Тип файла |
---|---|
S_ISFIFO(mode) | FIFO |
S_ISCHR(mode) | Специальный файл символьного устройства |
S_ISDIR(mode) | Каталог |
S_ISBLK(mode) | Специальный файл блочного устройства |
S_ISREG(mode) | Обычный файл |
S_ISLNK(mode) | Символическая связь |
S_ISSOCK(mode) | Сокет |
Все значения времени, связанные с файлом (время доступа, модификации данных и метаданных) хранятся в секундах, прошедших с 0 часов 1 января 1970 года. Заметим, что информация о времени создания файла отсутствует.
Приведенная ниже программа выводит информацию о файле, имя которого передается ей в качестве аргумента:
Программа использует библиотечные функции major(3C) и minor(3C), возвращающие, соответственно, старший и младший номера устройства. Функция ctime(3C) преобразует системное время в удобный формат.
Запуск программы на выполнение приведет к следующим результатам:
Процессы
В главе 1 уже упоминались процессы. Однако знакомство ограничивалось пользовательским, или командным интерфейсом операционной системы. В этом разделе попробуем взглянуть на них с точки зрения программиста.
Процессы являются основным двигателем операционной системы. Большинство функций выполняется ядром требованию того или иного процесса. Выполнение этих функций контролируется привилегиями процесса, которые соответствуют привилегиям пользователя, запустившего его.
В этом разделе рассматриваются:
Идентификаторы процесса
Программный интерфейс управления памятью: системные вызовы низкого уровня и библиотечные функции, позволяющие упростить управление динамической памятью процесса.
Важнейшие системные вызовы, обеспечивающие создание нового процесса и запуск новой программы. Именно с помощью этих вызовов создается существующая популяция процессов в операционной системе и ее функциональность.
Сигналы и способы управления ими. Сигналы можно рассматривать как элементарную форму межпроцессного взаимодействия, позволяющую процессам сообщать друг другу о наступлении некоторых событий. Более мощные средства будут рассмотрены в разделе "Взаимодействие между процессами" главы 3.