Por que os editores de texto definem o mtime ao salvar quando nenhuma alteração foi feita?

2

Quando estou usando o sublime e não fiz alterações, o ícone no editor mostra que o arquivo não foi alterado.

No entanto, se eu clicar para salvá-lo, ele ainda definirá o tempo de mtime do sistema de arquivos agora.

Um salvamento que não muda realmente atualiza o horário "modificado"?

Exemplo simples:

Crie um arquivo vazio

$ touch example.file
$ stat -l example.file 
-rw-r--r-- 1 matthew staff 0 Jul  9 14:45:41 2013 example.file

Tocá-lo atualiza o mtime

$ touch example.file
$ stat -l example.file
-rw-r--r-- 1 matthew staff 0 Jul  9 14:45:57 2013 example.file

Editar, mas sem alterações, também atualiza o mtime

$ vim example.file
# :wq # write and quit, making no changes
$ stat -l example.file
-rw-r--r-- 1 matthew staff 0 Jul  9 14:46:10 2013 example.file
    
por Matthew Rudy 09.07.2013 / 15:55

1 resposta

2

Should a non-changing save really update the "modified" time?

Sim, porque quando um aplicativo grava um arquivo, o sistema operacional grava esses dados no disco. Pode ser exatamente o mesmo que os dados já no arquivo, mas o sistema operacional não vai verificar ou se isso é verdade. É claro que os editores de texto não são tão ingênuos em escrever um arquivo inteiro para cada salvamento, porque eu salvo com muita frequência e preferiria não usar um disco sem sentido (talvez o cache de arquivos e a sincronização pelo SO amenizem isso, então o aplicativo não tem que se preocupar).

Muitos aplicativos (incluindo o vim) irão notar se um arquivo que eles carregaram for alterado externamente e notificarão o usuário. Eu teria presumido que eles fazem isso com base no mtime, mas uma verificação rápida com touch demonstra que pelo menos no caso do vim, não é tão simples (implorando a questão de como o vim sabe que uma mudança foi feita - talvez se o mtime mudou um hash das duas versões é comparado?). Meu ponto com isso é que, se o aplicativo estiver monitorando um arquivo para alterações externas, ele poderá salvar as alterações com segurança sem reescrever o arquivo inteiro (novamente: esperançosamente). Nesse caso, você pensaria que salvar um arquivo inalterado poderia significar não fazer nada. No entanto, como o usuário solicitou um salvamento (mesmo que o usuário saiba, ou possa saber, se é necessário), o aplicativo deve, pelo menos, tocar no arquivo para refletir isso. Pode ser de valor, se, por exemplo. você está contando com o registro de data e hora para refletir a última atualização, mesmo que essa atualização não seja nada.

Afinal, se você não quiser que o registro de data e hora seja alterado, não será necessário salvar documentos inalterados.

    
por 09.07.2013 / 16:34

Tags