Программирование сервера для выхода из группы процессов

Код, необходимый для перемещения серверного процесса в его собственную, приватную группу процессов, является простейшим:

(void)setpgrp(0,getpid()); 

Вызов функции getpid приводит к получению идентификатора процесса, выполняемого в настоящее время (т.е. сервера), а вызов функции setpgrp представляет собой запрос к операционной системе перевести указанный процесс в новую, приватную группу процессов. Готовые окна по сниженным ценам - окна пластиковые воронеж цены. Пластиковые окна. Выгодные цены.

30.14. Дескрипторы для стандартных устройств ввода/вывода

Для работы многих библиотечных процедур необходимо, чтобы были открыты и доступны для ввода/вывода три стандартных дескриптора файла: стандартное устройство ввода данных (0), стандартное устройство вывода данных (1) и стандартное устройство вывода сообщений об ошибках (2). В частности, такая стандартная библиотечная процедура, как perror (которая выводит сообщения об ошибках), выполняет запись в стандартный дескриптор устройства вывода сообщений об ошибках, не проверяя его готовности. Если какой-либо из этих дескрипторов открыт и сервер вызывает библиотечную процедуру для чтения или записи в него, ввод/вывод может произойти на терминал или в файл. Чтобы исключить неприятные неожиданности, программисты обычно открывают в серверной программе стандартные дескрипторы и подключают их к безопасным устройствам ввода/вывода. Таким образом, если какая-либо процедура в сервере попытается выполнить ввод/вывод с использованием стандартного дескриптора, в сервере не произойдет непреднамеренная операция ввода/вывода.

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

30.15. Программирование сервера для открытия стандартных дескрипторов

Код, необходимый для открытия стандартных дескрипторов ввода/вывода после закрытия в сервере всех дескрипторов, состоит из трех системных вызовов:

fd = open("/dev/null", 0_RDWR); /* Стандартное устройство ввода данных */ (void) dup(fd); /* Стандартное устройство вывода данных */ (void) dup(fd); /* Стандартное устройство вывода сообщений об ошибках */  

В вызове функции open указан специальный файл Linux с именем /dev/null, который соответствует устройству. Устройство, связанное с файлом /dev/null, всегда возвращает признак конца файла при вводе и отбрасывает весь вывод. Поэтому чтение или запись на устройство /dev/null представляет собой пустую операцию, при выполнении которой ни на одном запоминающем устройстве не накапливаются какие-либо данные.

Вызовы системной функции dup приводят к дублированию существующего дескриптора файла. В соответствии с общепринятым соглашением система Linux назначает дескрипторы файлов последовательно, начиная с 0. После открытия в сервере файла /dev/null и получения для него дескриптора 0 следующие вызовы функции dup приводят к созданию копии для стандартного устройства вывода (дескриптор 1) и стандартного устройства вывода сообщений об ошибках (дескриптор 2).

Похожие статьи Меню Опрос Фото Популярное