Скачиваний:
56
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

4.6.4. Ограничения файловой системы: процедуры pathconf и fpathconf

Комитет разработки стандарта POSIX и другие группы разработки стандартов несколько формализовали способ определения системных ограничений. Так как система может поддерживать различные типы файловых систем, определенные ограничения могут различаться для разных файлов и каталогов. Для запроса этих ограничений, связанных с определенным каталогом, могут использоваться две процедуры, pathconf и fpathconf.

Описание

uses stdio;

function pathconf(pathname:pchar;name:longint):integer;

function fpathconf(filedes, name:longint):integer;

Обе эти процедуры работают одинаково и возвращают значение для запрошенного ограничения или переменной. Различие между ними заключается в первом параметре: для процедуры pathconf это имя файла или каталога, а для процедуры fpathconf – дескриптор открытого файла. Второй параметр является значением одной из констант, определенных в файле stdio и обозначающих запрашиваемое ограничение.

Следующая программа lookup может использоваться для вывода системных ограничений для заданного файла/каталога. В этом примере программа lookup выводит наиболее интересные из этих значений для стандартного каталога /tmp:

(* Программа lookup - выводит установки ограничений файлов *)

uses stdio;

type table=record

val:integer;

name:pchar;

end;

var

tb:^table;

const options:array [0..3] of table=(

(val:_PC_LINK_MAX; name:'Максимальное число ссылок'),

(val:_PC_NAME_MAX; name:'Максимальная длина имени файла'),

(val:_PC_PATH_MAX; name:'Максимальная длина пути'),

(val:-1; name:nil)

);

begin

tb:=options;

while tb^.name<>nil do

begin

printf('%-32.31s%ld'#$a, [tb^.name, pathconf ('/tmp', tb^.val)]);

inc(tb);

end;

end.

На одной из систем эта программа вывела следующий результат:

Максимальное число ссылок 32767

Максимальная длина имени файла 256

Максимальная длина пути 1024

Эти значения относятся к каталогу /tmp. Максимально возможное число ссылок является характеристикой самого каталога, а максимальная длина имени файла относится к файлам в каталоге. Существуют также общесистемные ограничения (system-wide limits), они декларируются в файле <limits.h> и их значения могут быть определены при помощи похожей процедуры sysconf.

Глава 5. Процесс

5.1. Понятие процесса

Как было уже рассмотрено в главе 1, процессом в терминологии UNIX является просто экземпляр выполняемой программы, соответствующий определению задачи в других средах. Каждый процесс объединяет код программы, значения данных в переменных программы и более экзотические элементы, такие как значения регистров процессора, стек программы и т.д.1

Командный интерпретатор для выполнения команд обычно запускает один или несколько процессов. Например, командная строка

$ cat file1 file2

приведет к созданию процесса для выполнения команды cat. Немного более сложная команда

$ ls | wc -l

приведет к созданию двух процессов для одновременного выполнения команд ls и wc. (Кроме этого, результат программы ls, вывод списка файлов в каталоге, перенаправляется с помощью программного канала (pipe) на вход программы подсчета числа слов wc.)

Так как процессы соответствуют выполняемым программам, не следует путать их с программами, которые они выполняют. Несколько процессов могут выполнять одну и ту же программу. Например, если несколько пользователей выполняют одну и ту же программу редактора, то каждый из экземпляров программы будет отдельным процессом.

Любой процесс UNIX может, в свою очередь, запускать другие процессы. Это придает среде процессов UNIX иерархическую структуру, подобную дереву каталогов файловой системы. На вершине дерева процессов находится единственный управляющий процесс, экземпляр очень важной программы init, которая является предком всех системных и пользовательских процессов.

Система UNIX предоставляет программисту набор системных вызовов для создания процессов и управления ими. Если исключить различные средства для межпроцессного взаимодействия, то наиболее важными из оставшихся будут:

fork

Используется для создания нового процесса, дублирующего вызывающий. Вызов fork является основным примитивом создания процессов

ехес

Семейство библиотечных процедур и один системный вызов, выполняющих одну и ту же функцию – смену задачи процесса за счет перезаписи его пространства памяти новой программой. Различие между вызовами ехес в основном лежит в способе задания списка их аргументов

wait

Этот вызов обеспечивает элементарную синхронизацию процессов. Он позволяет процессу ожидать завершения другого процесса, обычно логически связанного с ним

halt

Используется для завершения процесса

Далее рассмотрим, что представляют собой процессы UNIX в целом и вышеприведенные четыре важных системных вызова в частности.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal