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 () :
Portanto, uma implementaçãoThe character 'b' shall have no effect, but is allowed for ISO C standard conformance.
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 .