Флажок close-on-exec

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

Для использования этого автоматического средства в сервере необходимо установить флажок close-on-exec (закрытие после вызова на выполнение) в каждом дескрипторе, который должен быть закрыт системой. После вызова в сервере функции execve система проверяет каждый дескриптор для определения того, установлен ли в нем этот флажок, и в случае положительного ответа, автоматически вызывает функцию close. Хотя на первый взгляд может показаться, что автоматическое закрытие не упрощает работу по программированию, следует помнить, что при разработке большой, сложной программы программист может уже не помнить о назначении каждого дескриптора к тому моменту, когда в программе должна быть вызвана функция execve. Применение флажка close-on-exec позволяет программисту определить, должен ли дескриптор оставаться открытым, в ходе разработки той части программы, где создается сам дескриптор. Поэтому такое системное средство может стать исключительно удобным. ювелирный интернет магазин Необходимо туалетные кабины+для дачи. Всегда.

Резюме

В процессах дескрипторы служат в качестве неявных параметров при создании нового процесса или при перекрытии кода работающей программы кодом из файла. Дескрипторы часто используются для передачи соединения TCP или сокета UDP в серверах, которые вызывают на выполнение отдельно оттранслированные программы.

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

Для переупорядочения дескрипторов в процессе применяются системные вызовы dup2 и close. Функция dup2 копирует существующий дескриптор в указанное место, а функция close удаляет исходный дескриптор. Чтобы переместить дескриптор А в дескриптор В, в процессе вначале выполняется оператор dup2(A,£), а затем оператор close (А).

Материал для дальнейшего изучения

Дополнительная информация о системных вызовах dup2 и close приведена в оперативной документации Linux.

  1. Прочитайте литературу о командном интерпретаторе Linux. Какие дескрипторы он присваивает перед вызовом команды на выполнение?
  2. Вкратце опишите алгоритм, применяемый в командном интерпретаторе для выполнения операции перенаправления ввода/вывода в файл. Покажите, как в нем перемещаются дескрипторы файлов перед вызовом функции execve.
  3. Доработайте мультисервисный сервер, описанный в главе 15 таким образом, чтобы в нем дескриптор 0 использовался в качестве неявного параметра, а для вызова ведомой программы на выполнение применялась функция execve.
  4. Прочитайте литературу о программе inetd. Как в ней используются дескрипторы в качестве неявных параметров?
  5. Какие действия выполняет вызов dup2,jn, если n уже равен m. Напишите версию функции dup2, которая работает с произвольными значениями n и m.
Похожие статьи Меню Опрос Фото Популярное