Cada processo possui sua própria tabela de descritores de arquivos. O descritor de arquivo 4 no processo 1234 aponta para a tabela do processo 1234. O descritor de arquivo 4 no processo 5678 aponta para a tabela do processo 5678. Um caso com o qual você deve estar familiarizado são os descritores de arquivo 0, 1 e 2, que para cada processo são a entrada padrão, a saída padrão e o erro padrão, apontando para onde eles foram redirecionados.
Um processo pode abrir o mesmo arquivo mais de uma vez. Isso pode acontecer por coincidência, por exemplo, quando a saída padrão de um processo e o erro padrão são redirecionados para o mesmo terminal ou para o mesmo arquivo. As entradas subjacentes da tabela de arquivos (por exemplo, Linuxstruct file
) carregam mais do que informações sobre o arquivo; eles também contêm modos de abertura (por exemplo, leitura ou gravação) e outro estado (como sinalizadores, por exemplo, close-on-exec). Por exemplo, um processo pode ter um terminal aberto para leitura apenas no descritor de arquivo 0 e o mesmo terminal aberto para gravação apenas no descritor de arquivo 2. As entradas de tabelas de arquivos também contêm a posição do processo no arquivo; um processo pode querer lseek
duas posições diferentes no mesmo arquivo e, portanto, seria usado dup
para obter duas alças para esse arquivo.
4
nos dois processos seja relativo ao seu próprio número de fd abertos. Os0-2
DFs (stdin, stdout, sdterr) são sempre abertos para um novo processo e os números não são reservados apenas para esse processo.