De o manual fork(2)
no meu sistema OpenBSD (minha ênfase):
The child process has its own copy of the parent's descriptors. These descriptors reference the same underlying objects, so that, for instance, file pointers in file objects are shared between the child and the parent, so that an
lseek(2)
on a descriptor in the child process can affect a subsequentread(2)
orwrite(2)
by the parent. This descriptor copying is also used by the shell to establish standard input and output for newly created processes as well as to set up pipes.
Isso significa que, se você abrir um arquivo no processo pai antes de bifurcar o filho, ambos os processos terão o mesmo arquivo aberto. No entanto, se a criança ler o arquivo, o ponteiro de arquivo do pai também será movido.
Para acessar um arquivo em ambos os processos independentemente , você precisa abrir o arquivo em ambos os processos separadamente.
Se você abrir um arquivo no pai após a chamada para fork()
, ele não será aberto no processo filho e vice-versa.