Что происходит с таблицей файловых дескрипторов в родительском процессе после вызова dup2 и execvp в дочернем процессе?

StackOverflow https://stackoverflow.com//questions/25050117

  •  21-12-2019
  •  | 
  •  

Вопрос

Я кодирую простую программу-оболочку, но не уверен в том, что происходит с таблицей файловых дескрипторов после dup2() и execvp.Итак, у меня есть родительский процесс, ожидающий завершения дочернего процесса (waitpid), но когда он возвращается к ожиданию следующего пользовательского ввода, почему таблица файловых дескрипторов, которую я изменил с помощью dup2 в дочернем процессе, не сохраняется в родительском процессе?Это потому, что execvp сбрасывает таблицу файловых дескрипторов обратно к исходной?

РЕДАКТИРОВАТЬ:Я понял это.Функция fork фактически создает отдельную копию образа программы, включая таблицу файловых дескрипторов, поэтому таблица fd родительского процесса остается незатронутой.

Это было полезно?

Решение

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

(Обратите внимание, что, в то время как файловый дескриптор стол не является общим для родительского объекта, состояние самих файловых дескрипторов таково!Например, если вы seek() в файловом дескрипторе, который дочерний процесс унаследовал от своего родительского, это также влияет на копию в родительском процессе.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top