md5sum comando modo binário e texto

8

O comando GNU md5sum possui dois modos: o modo binário e o modo texto . Eu acho que a diferença é apenas em como personagens de nova linha são manipulados? Estou certo?

No GNU / Linux, os dois modos sempre produzem o mesmo resultado, portanto, o único uso das opções -b e -t é indicar o sinalizador ( * ou ) usado antes do nome do arquivo?

Em que circunstâncias os modos podem produzir resultados diferentes? Nos sistemas Windows / MacOS? (Versões para estas plataformas disponíveis?)

    
por frozen-flame 05.05.2014 / 17:50

1 resposta

6

On GNU/Linux, the two modes always produce same result

Sim, explicitamente. De man md5sum :

Note: There is no difference between binary and text mode option on [sic] GNU system.

Isto é da implementação md5sum que vem com o GNU coreutils 8.21; Eu noto que uma versão mais antiga (8.12) não tem este aviso, mas presumo que o mesmo seja verdade mesmo assim.

Embora o AFAICT md5sum não seja padronizado oficialmente (por exemplo, pelo POSIX), ele está disponível em várias plataformas em várias implementações e obviamente há algum esforço para torná-los compatíveis entre si para facilidade de uso entre sistemas.

Em relação a isso, o Padrão ISO / ANSI C inclui funções de fluxo de alto nível para acessar arquivos. Como parte do padrão, eles estão disponíveis em qualquer sistema operacional que implemente o ISO C por meio de uma biblioteca compartilhada ou um compilador. Uma vez que praticamente todos os sistemas operacionais têm esta disponível (e são eles mesmos escritos com mais frequência em C), é uma espécie de linguagem universal usada para implementar software potencialmente muito portátil.

Considerando o que isso faz, seria totalmente possível escrever um md5sum que compilaria e funcionaria em qualquer sistema operacional. Eu não estou afirmando que isso é verdade da versão GNU coreutils, mas uma das funções de fluxo de arquivo de alto nível mencionadas anteriormente é fopen() , que é obrigatória pela ISO C para incluir uma opção b usada na abertura de um arquivo para indicar isso está sendo aberto "como arquivo binário". O que isso pode significar ou requerer do sistema não é estipulado pela norma, é apenas necessário que exista para que possa ser usado no sistema onde possa haver alguns ( qualquer ) razão para isso.

Não existe tal razão nos sistemas operacionais linux / POSIX / * nix, então o switch não faz nada. Da especificação POSIX (um superconjunto do ISO C) para fopen () :

The character 'b' shall have no effect, but is allowed for ISO C standard conformance.

Portanto, uma implementação md5sum totalmente portátil pode usar as funções de fluxo de arquivo de alto nível ISO, já que não há outros métodos para acessar arquivos no ISO C (a maioria das plataformas, incluindo as de reclamação POSIX, possui seus próprios métodos de nível inferior). bem, mas usá-los não seria portátil, porque eles não estão no ISO C), e também deve implementar os -b e -t sinalizadores para adicionar ou não adicionar a opção b para fopen() quando lê o Arquivo. Em sistemas onde isso não tem sentido, não fará diferença alguma.

Novamente, eu não estou dizendo que o md5sum do GNU é escrito de uma maneira completamente portável ou derivado de um que é, mas obviamente ele está tentando cumprir, em sua operabilidade, com um que seja. Observe que ter um sinalizador que não faz nada não é o mesmo que não ter o sinalizador - no primeiro caso, ele está especificado para ficar bem, mas não faz nada, enquanto que no último caso, usá-lo pode ser um erro ou levar a comportamento indefinido .

    
por 05.05.2014 / 17:56