Die GNU md5sum
Der Befehl hat zwei Modi:binär Modus und Text Modus. Ich denke, der Unterschied besteht nur darin, wie Zeilenumbruchzeichen behandelt werden? Habe ich Recht?
Unter GNU/Linux erzeugen die beiden Modi immer das gleiche Ergebnis, daher die einzige Verwendung von -b
und -t
Optionen ist die Angabe des Flags (*
oder ) vor dem Dateinamen verwendet?
Unter welchen Umständen können die Modi zu unterschiedlichen Ergebnissen führen? Auf Windows/MacOS-Systemen? (Versionen für diese Plattformen verfügbar?)
Akzeptierte Antwort:
Unter GNU/Linux erzeugen die beiden Modi immer das gleiche Ergebnis
Ja, explizit. Von man md5sum
:
Hinweis: Es gibt keinen Unterschied zwischen Binär- und Textmodusoption auf [sic] GNU-System.
Dies ist aus der md5sum
Implementierung, die mit GNU Coreutils 8.21 ausgeliefert wird; Mir ist aufgefallen, dass eine ältere Version (8.12) diesen Hinweis nicht hat, aber ich nehme an, dass das trotzdem zutreffen würde.
Obwohl AFAICT md5sum
ist nicht offiziell standardisiert (z. B. von POSIX), es ist auf verschiedenen Plattformen in verschiedenen Implementierungen verfügbar, und es gibt offensichtlich einige Anstrengungen, diese für eine einfache systemübergreifende Verwendung miteinander kompatibel zu machen.
In diesem Zusammenhang enthält der ISO/ANSI-C-Standard High-Level-Stream-Funktionen für den Zugriff auf Dateien. Als Teil des Standards sind diese auf jedem Betriebssystem verfügbar, das ISO C über eine gemeinsam genutzte Bibliothek oder einen Compiler implementiert. Da so ziemlich alle Betriebssysteme dies zur Verfügung haben (und selbst meistens in C geschrieben sind), ist es eine Art universelle Sprache, die verwendet wird, um potenziell sehr portable Software zu implementieren.
In Anbetracht dessen, was es tut, wäre es durchaus machbar, eine md5sum
zu schreiben das würde auf jedem Betriebssystem kompilieren und funktionieren. Ich behaupte nicht, dass dies auf die GNU Coreutils-Version zutrifft, aber eine der zuvor erwähnten High-Level-Dateistreamfunktionen ist fopen()
, das von ISO C vorgeschrieben wird, um ein b
einzufügen Schalter, der beim Öffnen einer Datei verwendet wird, um anzuzeigen, dass sie „als Binärdatei“ geöffnet wird. Was das bedeuten oder vom System verlangen kann, ist es nicht vom Standard vorgeschrieben, muss es nur vorhanden sein, damit es auf Systemen verwendet werden kann, auf denen es einige (beliebige ) Grund dafür.
Auf Linux/POSIX/*nix-Betriebssystemen gibt es keinen solchen Grund, daher macht der Schalter nichts. Aus der POSIX-Spezifikation (eine Obermenge von ISO C) für fopen():
Das Zeichen „b“ hat keine Wirkung, ist aber für die Konformität mit dem ISO-C-Standard zulässig.
Also eine vollständig portable md5sum
Die Implementierung verwendet möglicherweise die ISO-Dateistromfunktionen auf hoher Ebene, da es keine anderen Methoden für den Zugriff auf Dateien in ISO C gibt (die meisten Plattformen, einschließlich der POSIX-beanstandeten, haben auch ihre eigenen Methoden auf niedrigerer Ebene, aber die Verwendung dieser wäre nicht portierbar, weil sie sind nicht in ISO C), und es sollte auch das -b
implementieren und -t
Flags, um das b
hinzuzufügen oder nicht hinzuzufügen Option zu fopen()
wenn es die Datei liest. Auf Systemen, auf denen das bedeutungslos ist, macht es keinen Unterschied.
Nochmals, ich sage nicht, dass md5sum von GNU auf eine so vollständig portierbare Weise geschrieben oder von einem abgeleitet ist, aber offensichtlich versucht es, in seiner Bedienbarkeit mit einem zu übereinstimmen, das ist. Beachten Sie, dass es nicht dasselbe ist, ein Flag zu haben, das nichts tut, als das Flag nicht zu haben – im ersten Fall ist es so angegeben, dass es in Ordnung ist, aber nichts tut, während die Verwendung im letzteren Fall ein Fehler sein oder zu undefiniertem Verhalten führen kann.