Операционная система UNIX
Шрифт:
Для определения типа файла служат следующие макроопределения, описанные в файле <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.
Группы и сеансы; взаимодействие процесса с пользователем.
Ограничения, накладываемые на процесс, и функции, которые позволяют управлять этими ограничениями.
Идентификаторы процесса
Вы уже знаете, что каждый процесс характеризуется набором атрибутов и идентификаторов, позволяющих системе управлять его работой. Важнейшими из них являются идентификатор процесса PID и идентификатор родительского процесса PPID. PID является именем процесса в операционной системе, по которому мы можем адресовать его, например, при отправлении сигнала. PPID указывает на родственные отношения между процессами, которые (как и в жизни) в значительной степени определяют его свойства и возможности.