2010-11-25 9 views
22

Digamos que abro un archivo con open(). Entonces yo fork() mi programa.¿Se comparten descriptores de archivos al tenedor() ing?

¿El padre y el hijo compartirán ahora el mismo desplazamiento para el descriptor de archivo?

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

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

Respuesta

28

De 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)). 
+1

¿Esto no dependen de donde se ha abierto el archivo? Es decir, si la llamada de abrir (nombre de archivo, int ..) se realiza después de la bifurcación o antes de ella. – ArmenB

+1

@Armen: Sí, sí, sí. –

+0

Lo curioso de esto es que si la declaración de apertura de archivo se hace 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 hijo como el padre ignoran el bloqueo – ArmenB

2

Comparten el mismo desplazamiento.

Cuestiones relacionadas