Quando você apaga um arquivo, você realmente remove um link para o arquivo (para o inode). Se alguém já tiver esse arquivo aberto, ele poderá manter o descritor de arquivo que possui. O arquivo permanece no disco, ocupando espaço e pode ser gravado e lido se você tiver acesso a ele.
A unlink
function é definida com esse comportamento por POSIX:
When the file's link count becomes 0 and no process has the file open, the space occupied by the file shall be freed and the file shall no longer be accessible. If one or more processes have the file open when the last link is removed, the link shall be removed before unlink() returns, but the removal of the file contents shall be postponed until all references to the file are closed.
Este conselho por causa desse comportamento. O daemon terá o arquivo aberto e não notará que ele foi excluído (a menos que esteja monitorando especificamente, o que é incomum). Ele vai continuar escrevendo alegremente para o descritor de arquivo existente: você continuará ocupando (mais) espaço no disco, mas você não poderá ver nenhuma das mensagens que escreve, então você está realmente no pior. dos dois mundos. Se você truncar o arquivo para comprimento zero, o espaço será liberado imediatamente e todas as novas mensagens serão adicionadas na nova extremidade do arquivo, onde você poderá vê-las.
Eventualmente, quando o daemon termina ou close
s o arquivo , o espaço será liberado. Ninguém pode abrir o arquivo nesse meio tempo (exceto por meio de interfaces reflexivas específicas do sistema, como /proc/x/fd/...
do Linux ). Também é garantido que:
If the link count of the file is 0, when all file descriptors associated with the file are closed, the space occupied by the file shall be freed and the file shall no longer be accessible.
Assim, você não perde seu espaço em disco permanentemente, mas não ganha nada excluindo o arquivo e perde o acesso a novas mensagens.