Commande md5sum en mode binaire et texte

13

La md5sumcommande GNU a deux modes: le mode binaire et le mode texte . Je suppose que la différence ne concerne que la façon dont les caractères de nouvelle ligne sont traités? Ai-je raison?

Sur GNU / Linux, les deux modes produisent toujours le même résultat, donc la seule utilisation de -bet d' -toptions est d'indiquer l'indicateur ( *ou ) utilisé avant le nom du fichier?

Dans quelles circonstances les modes peuvent-ils produire des résultats différents? Sur les systèmes Windows / MacOS? (Versions disponibles pour ces plateformes?)

flamme-gelée
la source

Réponses:

11

Sur GNU / Linux, les deux modes produisent toujours le même résultat

Oui, explicitement. De man md5sum:

Remarque: Il n'y a pas de différence entre les options de mode binaire et texte sur le système [sic] GNU.

Cela provient de l' md5sumimplémentation fournie avec GNU coreutils 8.21; Je remarque qu'une ancienne version (8.12) n'a pas cet avis mais je suppose que la même chose serait vraie de toute façon.

Bien que l'AFAICT md5sumne soit pas officiellement normalisé (par exemple, par POSIX), il est disponible sur diverses plates-formes dans diverses implémentations et il y a évidemment un certain effort pour les rendre compatibles entre elles pour une facilité d'utilisation sur tous les systèmes.

Par rapport à cela, la norme ISO / ANSI C comprend des fonctions de flux de haut niveau pour accéder aux fichiers. Dans le cadre de la norme, ceux-ci sont disponibles sur tout système d'exploitation qui implémente ISO C via une bibliothèque partagée ou un compilateur. Comme presque tous les systèmes d'exploitation l'ont (et sont eux-mêmes le plus souvent écrits en C), c'est une sorte de langage universel utilisé pour implémenter des logiciels potentiellement très portables.

Compte tenu de ce qu'il fait, il serait tout à fait possible d'écrire un md5sumqui compilerait et fonctionnerait sur n'importe quel système d'exploitation. Je ne prétends pas que cela est vrai de la version GNU coreutils, mais l'une des fonctions de flux de fichiers de haut niveau mentionnées plus haut est fopen(), qui est mandatée par ISO C pour inclure un bcommutateur utilisé dans l'ouverture d'un fichier pour indiquer qu'il est ouvert "comme binaire fichier". Ce que cela peut signifier ou exiger du système n'est pas stipulé par la norme, il doit simplement exister afin qu'il puisse être utilisé sur le système où il peut y avoir une ( n'importe quelle ) raison.

Il n'y a pas une telle raison sur les systèmes d'exploitation de style linux / POSIX / * nix, donc le commutateur ne fait rien. De la spécification POSIX (un sur-ensemble d'ISO C) pour fopen () :

Le caractère «b» n'a aucun effet, mais est autorisé pour la conformité à la norme ISO C.

Ainsi, une md5sumimplémentation entièrement portable pourrait utiliser les fonctions de flux de fichiers de haut niveau ISO, car il n'y a pas d'autres méthodes pour accéder aux fichiers dans ISO C (la plupart des plates-formes, y compris les plaintes POSIX, ont également leurs propres méthodes de niveau inférieur, mais leur utilisation ne pas être portable car ils ne sont pas en ISO C), et il doit également implémenter les indicateurs -bet -tpour ajouter ou ne pas ajouter l' boption fopen()lors de la lecture du fichier. Sur les systèmes où cela n'a pas de sens, cela ne fera aucune différence.

Encore une fois, je ne dis pas que le md5sum de GNU est écrit d'une manière complètement portable ou dérivé de celui qui l'est, mais il essaie évidemment de se conformer, dans son opérabilité, à celui qui l'est. Notez que le fait d'avoir un indicateur qui ne fait rien n'est pas la même chose que de ne pas l'avoir - dans le premier cas, il est spécifié que tout va bien mais ne fait rien, alors que dans le dernier cas, son utilisation peut être une erreur ou conduire à un comportement indéfini. .

boucle d'or
la source
1
Pourquoi ces options sont-elles ajoutées si elles sont inutiles?
flamme gelée
1
J'ai ajouté quelques paragraphes ci-dessus à ce sujet (TL; DR -> pour se plaindre avec les versions des utilisateurs md5sum peuvent être familiers avec d'autres systèmes d'exploitation, et le code de lot, etc. écrit pour cela).
goldilocks