¿Qué sucede con la tabla de descriptores de archivos en el proceso principal después de llamar a dup2 y execvp en el proceso secundario?

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

  •  21-12-2019
  •  | 
  •  

Pregunta

Estoy codificando un programa de shell simple pero no estoy seguro de qué sucede con la tabla de descriptores de archivos después de dup2() y execvp.Entonces, tengo un proceso principal esperando a que finalice el proceso secundario (waitpid), pero cuando vuelve a esperar la siguiente entrada del usuario, ¿por qué la tabla de descriptores de archivos que modifiqué usando dup2 en el proceso secundario no persiste en el proceso principal?¿Es porque execvp restablece la tabla de descriptores de archivos al original?

EDITAR:Me lo imaginé.La función fork en realidad hace una copia separada de la imagen del programa, incluida la tabla de descriptores de archivos, para que la tabla fd del proceso principal no se vea afectada.

¿Fue útil?

Solución

Nada.El proceso hijo obtiene una copia de los descriptores de archivos del padre cuando es creado por fork(), pero los cambios que realiza después no se comparten con el padre.

(Tenga en cuenta que, si bien el descriptor de archivo mesa no se comparte con los padres, ¡el estado de los descriptores de archivos sí lo es!Por ejemplo, si usted seek() en un descriptor de archivo que un proceso hijo heredó de su padre, eso también afecta la copia en el padre).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top