Respostas:
No Unix, todos os arquivos normais são Hardlinks. Os hardlinks em um sistema de arquivos Unix (e na maioria (todos?)) São referências ao que é chamado de inode
. O inode
contador possui um contador de referência; quando você possui um "link" para o arquivo (que é o modus operandi normal), o contador é 1. Quando você cria um segundo, terceiro, quarto, etc. link, o contador é incrementado (aumentado) a cada tempo por um. Quando você exclui ( rm
) um link, o contador é decrementado (reduzido) em um. Se o contador de links atingir 0, o sistema de arquivos remove inode
e marca o espaço como disponível para uso.
Em resumo, contanto que você não exclua o último link, o arquivo permanecerá.
Edit:
O arquivo permanecerá mesmo se o último link for removido . Essa é uma das maneiras de garantir que a segurança dos dados contidos em um arquivo não seja acessível a nenhum outro processo. A remoção completa dos dados do sistema de arquivos é feita apenas se os dados tiverem 0 links, conforme fornecidos em seus metadados e não estiverem sendo utilizados por nenhum processo.
Este IMHO é, de longe, a maneira mais fácil de entender os links físicos (e sua diferença dos links virtuais).
unlink
editado.
/proc
é um sistema de arquivos (virtual) separado.
unlink()
para excluir um arquivo me intrigou sem fim quando comecei a jogar com a programação C no MS-DOS algum tempo atrás, na primeira metade dos anos 90. :)
O teste foi mais fácil do que eu pensava: criei um arquivo de texto e depois vinculei-o a ele. A exclusão do link físico não exclui o arquivo ao qual está vinculado e o arquivo vinculado permanece onde está.
todos os arquivos no seu disco são na verdade ponteiros para os dados reais da sua unidade.
quando você cria um link físico para esse arquivo, o arquivo editado será direcionado para os mesmos dados que o arquivo original estava apontando.
como neste exemplo, a.txt estava apontando para os dados (bytes) do arquivo que está na unidade, quando o hardlink b.txt é criado, ele aponta para o que a.txt estava apontando.
removendo um deles não afetará o outro, eles serão separados um do outro.
MAS, quando você remover os dois, o sistema verá que os dados que estão no disco não têm nenhum arquivo apontando para ele; portanto, o sistema o considerará como um espaço livre e o substituirá quando desejar.
FILE "A.txt"
é idêntico LINK "B.txt"
, principalmente porque você chamou um FILE
e outro LINK
. O link é realmente a seta preta.
unlink()
.