É possível que dois processos diferentes (pai e filho) possam ver o mesmo arquivo de texto e manipulá-lo?
Consegui isso, mas tive que abrir o arquivo em ambos os processos usando fopen(). Minha expectativa é que um dos processos abra o arquivo e o outro possa ver e manipular.
Do manual do
fork(2)
meu sistema OpenBSD (minha ênfase):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 o filho ler o arquivo, o ponteiro do arquivo do pai também será movido.
Para acessar um arquivo em ambos os processos de forma independente , você deve abrir o arquivo em ambos os processos separadamente.
Se você abrir um arquivo no processo pai após a chamada para
fork()
, ele não será aberto no processo filho e vice-versa.E aqui está um código de exemplo que faz exatamente isso.
o que está acontecendo é que o pai bloqueia a espera do filho e, enquanto isso, o filho busca o final da entrada padrão, menos sete, e fecha o
pipe(2)
para o pai. Isso desbloqueia o pai, que lê o descritor compartilhado de onde o filho moveu o ponteiro do arquivo compartilhado.Isso não funcionará se a entrada padrão não for pesquisável. Além disso, o pipe (ou alguma forma de comunicação) é realmente necessário, caso contrário, o pai pode correr antes do filho.
Se o descritor de arquivo não fosse compartilhado, o pai não leria de onde o filho moveu o ponteiro.