Descritor de arquivo e garfo

7

Quando um filho é bifurcado, ele herda os descritores de arquivos do pai, se o filho fechar o descritor de arquivo, o que acontecerá? Se a criança começar a escrever o que deve acontecer com o arquivo no final do pai? Quem gerencia essas inconsistências, kernel ou usuário?

quando um processo chama a função close para fechar um determinado arquivo aberto por meio do descritor de arquivo. Na tabela de arquivos do processo, a contagem de referência é diminuída em um. Mas como pai e filho estão mantendo o mesmo arquivo, a contagem de referência é 2 e depois de fechar ele reduz para 1. Como não é zero, o processo ainda continua a usar o arquivo sem nenhum problema.

Veja a programação do sistema Terrence Chan UNIX, (suporte a kernel Unix para arquivos).

    
por Madan Ram 17.09.2013 / 15:53

2 respostas

17

When a child is forked then it inherits parent's file descriptors, if child closes the file descriptor what will happen ?

Ele herda uma cópia do descritor de arquivo. Então, fechar o descritor na criança irá fechá-lo para a criança, mas não para o pai e vice-versa.

If child starts writing what shall happen to the file at the parent's end ? Who manages these inconsistencies , kernel or user ?

É exatamente (como em, exatamente literalmente) o mesmo que dois processos gravando no mesmo arquivo. O kernel agenda os processos de forma independente, portanto, você provavelmente obterá dados intercalados no arquivo.

when a process call close function to close a particular open file through file descriptor.The file table of process decrement the reference count by one.But since parent and child both are holding the same file(there refrence count is 2 and after close it reduces to 1)since it is not zero so process still continue to use file without any problem.

Existem DOIS processos, o pai e o filho. Não há "contagem de referência" comum a ambos. Eles são independentes. WRT o que acontece quando um deles fecha um descritor de arquivo, veja a resposta para a primeira pergunta.

    
por 17.09.2013 / 16:09
1

Sempre que fork() cria um novo filho, os descritores de arquivo não são retidos - eles são alterados.

Embora o arquivo seja duplicado, ele terá um descritor de arquivo diferente.

    
por 31.07.2014 / 20:30