¿Se comparten los descriptores de archivos cuando se bifurca ()?

1 minuto de lectura

Digamos que abro un archivo con open(). Entonces yo fork() mi programa.

¿Padre e hijo ahora compartirán el mismo desplazamiento para el descriptor de archivo?

Quiero decir, si escribo en mi padre, ¿el desplazamiento también se cambiará en el niño?

¿O las compensaciones serán independientes después de la fork()?

Desde fork(2):

  *  The child inherits copies of the parent’s set of open file  descrip-
     tors.   Each  file  descriptor  in the child refers to the same open
     file description (see open(2)) as the corresponding file  descriptor
     in  the parent.  This means that the two descriptors share open file
     status flags, current file offset, and signal-driven I/O  attributes
     (see the description of F_SETOWN and F_SETSIG in fcntl(2)).

  • ¿Esto no depende de dónde se haya abierto el archivo? Es decir, si la llamada open(filename, int..) se realiza después de la bifurcación o antes.

    – ArmenB

    13 de diciembre de 2012 a las 18:48

  • Lo extraño de esto es que, si la declaración de apertura de archivo se realiza después de la bifurcación, entonces tiene dos descriptores de archivo diferentes. Pero cuando intento bloquear el archivo usando fcntl, no funciona. Tanto el niño como el padre ignoran el candado.

    – ArmenB

    14 de diciembre de 2012 a las 17:29

  • Eso… suena como un error del kernel.

    – Ignacio Vázquez-Abrams

    14/12/2012 a las 17:30

  • ¿También va a pasar con el descriptor de archivo 1, que se supone que es STDOUT? ¿Mi proceso bifurcado va a compartir la salida estándar?

    – Guillermo

    21 de agosto de 2013 a las 10:22

  • @Dejell: fork() hace que los niños hereden ciertas estructuras de sus padres. Si no hay una relación padre/hijo, entonces…

    – Ignacio Vázquez-Abrams

    4 de diciembre de 2017 a las 18:13

Comparten el mismo desplazamiento.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad