Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 14 стр.

UptoLike

Составители: 

14
l_start Указывает смещение начала области, на которую распространяется
захват;
l_len Задает длину области, на которую распространяется захват;
l_pid Задает идентификатор процесса, которому принадлежит захваченная
область.
Следующие макросы используются для задания команд и параметров захвата.
int F_GETLK Используется как параметр COMMAND функции fcntl и указывает,
что необходимо получить информацию о захвате. При этом функция
принимает третий параметр типа struct flock *, вызов функции
выглядит следующим образом:
fcntl (FILEDES, F_GETLK, LOCKP)
Если захват в заданной области файла существует, в структуре
возвращается информация о нем. В области может существовать
более одного захвата. В этом случае информация возвращается
только об одном;
int F_SETLK Используется в функции fcntl как команда. При этом функция
принимает третий аргумент типа struct flock *. Если в заданной
области уже существует захват, старый захват замещается новым.
Удалить захват можно задав тип захвата F_UNLCK;
int F_SETLKW Аналогичен предыдущему за исключением того, что процесс
блокируется до тех пор, пока команда не будет выполнена;
F_RDLCK Задает тип захвата на чтение;
F_WRLCK Задает тип захвата на запись;
F_UNLCK Область разблокируется.
Примером ситуации, в которой может быть полезен захват файла служит быть
программа, которая может быть запущена несколькими пользователями независимо,
записывающая протокол работы в файл. Несколько процессов, одновременно
записывающих информацию в файл могут смещать информацию различных
пользователей, что приведет к неразберихе. В случае захвата файла этого не
произойдет.
Процессы
Процессы являются основными единицами, применяемыми для выделения
системных ресурсов. Каждый процесс имеет собственное адресное пространство и
(обычно) один поток управления. Процесс исполняется программой; можно запустить
несколько процессов, выполняющих одну и ту же программу, но каждый процесс имеет
свою собственную копию программы и исполняет ее независимо от других.
Процессы организованы иерархически. Каждый процесс имеет «родительский»
процесс, который явно классифицируется как его создатель. Процессы, созданные
данным «родителем» называются «дочерними» процессами. Дочерний процесс
наследует многие атрибуты своего родителя.
В этом разделе описывается каким образом программа может создать,
завершить и управлять дочерними процессами. Фактически существует три
выполняемые задачи:
1. Создание процесса;
2. Выполнение новым процессом программы;
3. Координация завершение дочернего процесса с родительским процессом.
l_start       Указывает смещение начала области, на которую распространяется
              захват;
l_len         Задает длину области, на которую распространяется захват;
l_pid         Задает идентификатор процесса, которому принадлежит захваченная
              область.
        Следующие макросы используются для задания команд и параметров захвата.
int F_GETLK      Используется как параметр COMMAND функции fcntl и указывает,
                 что необходимо получить информацию о захвате. При этом функция
                 принимает третий параметр типа struct flock *, вызов функции
                 выглядит следующим образом:
                        fcntl (FILEDES, F_GETLK, LOCKP)
                 Если захват в заданной области файла существует, в структуре
                 возвращается информация о нем. В области может существовать
                 более одного захвата. В этом случае информация возвращается
                 только об одном;
int F_SETLK      Используется в функции fcntl как команда. При этом функция
                 принимает третий аргумент типа struct flock *. Если в заданной
                 области уже существует захват, старый захват замещается новым.
                 Удалить захват можно задав тип захвата F_UNLCK;
int F_SETLKW     Аналогичен предыдущему за исключением того, что процесс
                 блокируется до тех пор, пока команда не будет выполнена;
F_RDLCK          Задает тип захвата на чтение;
F_WRLCK          Задает тип захвата на запись;
F_UNLCK          Область разблокируется.
        Примером ситуации, в которой может быть полезен захват файла служит быть
программа, которая может быть запущена несколькими пользователями независимо,
записывающая протокол работы в файл. Несколько процессов, одновременно
записывающих информацию в файл могут смещать информацию различных
пользователей, что приведет к неразберихе. В случае захвата файла этого не
произойдет.

        Процессы
        Процессы являются основными единицами, применяемыми для выделения
системных ресурсов. Каждый процесс имеет собственное адресное пространство и
(обычно) один поток управления. Процесс исполняется программой; можно запустить
несколько процессов, выполняющих одну и ту же программу, но каждый процесс имеет
свою собственную копию программы и исполняет ее независимо от других.
        Процессы организованы иерархически. Каждый процесс имеет «родительский»
процесс, который явно классифицируется как его создатель. Процессы, созданные
данным «родителем» называются «дочерними» процессами. Дочерний процесс
наследует многие атрибуты своего родителя.
        В этом разделе описывается каким образом программа может создать,
завершить и управлять дочерними процессами. Фактически существует три
выполняемые задачи:
        1. Создание процесса;
        2. Выполнение новым процессом программы;
        3. Координация завершение дочернего процесса с родительским процессом.




          14