
Se o link simbólico e o link físico forem ponteiros para um arquivo.
E o descritor de arquivo é um identificador de arquivo que aponta para um arquivo aberto.
Então, qual é a diferença exata entre os dois se ambos são uma espécie de ponteiro para um arquivo.
Além disso, o link físico aponta para o endereço do local do conteúdo do arquivo e o descritor do arquivo também aponta para o conteúdo do arquivo, então o que exatamente difere aqui. O hard link também possui seus próprios descritores de arquivo.
Responder1
Filosoficamente, pode-se argumentar que eles não são diferentes.
Mas eles são completamente diferentes no porquê, onde e como são usados e implementados.
Primeiro, tanto os links físicos quanto os soft/simbólicos são entradas de diretório, ou seja, são entradas/registros em um arquivo especialmente formatado chamado diretório, onde cada registro contém um nome e um número de inode - este último referindo-se à estrutura real que contém o os metadados do arquivo (permissões, tamanho, etc) e a lista de blocos de dados - estrutura que é chamada de "inode".
A diferença entre um link físico e um link simbólico é que, enquanto o inode para o qual um link físico aponta contém os dados reais, o inode para o qual um link simbólico aponta contém o caminho para outro arquivo. Basicamente, os links simbólicos são eles própriosdurolinks que apontam para um tipo especial de arquivo, assim como pipes nomeados, arquivos de soquete de domínio unix, etc.
Agora, quando o kernel abre um arquivo, ele cria uma estrutura na memória duplicando o inode do disco e contendo alguns dos mesmos metadados (permissões, lista de blocos contendo dados, tamanho, etc.). Esta estrutura é apontada por outra estrutura chamada "descrição de arquivo aberto" (que contém coisas como o ponteiro de posição, se o arquivo foi aberto em modo leitura-gravação ou somente leitura, se deve ser lido e escrito em modo não bloqueador modo, etc.). Finalmente, esta estrutura é apontada por uma entrada em outra estrutura do kernel (por processo), uma matriz/tabela chamada tabela de descritores de arquivo.
O "descritor de arquivo", o inteiro retornado por chamadas de sistema como open(2), é um índice desta tabela.
Um inode na memória pode ser apontado por múltiplas "descrições de arquivos abertos", que por sua vez podem ser apontados por vários descritores de arquivo, de vários processos.
Algumas das chamadas de sistema como open(2) tratarão links simbólicos especialmente - quando o arquivo que eles estão abrindo for um link simbólico, eles continuarão tentando abrir o arquivo nomeado pelo caminho que é seu conteúdo.
Tanto as estruturas de disco (diretórios, inodes) quanto as estruturas de kernel/memória (inodes, descrições de arquivos abertos) estão usando contagem de referência para controlar qual está usando qual. (Não, não há nenhum coletor de lixo de marcação e varredura no kernel que salte através de ponteiros na memória ou no disco para determinar quais objetos não são mais referenciados em nenhum outro lugar ;-)).