W systemach GNU / Linux oba tryby zawsze dają taki sam wynik
Tak, wyraźnie. Od man md5sum
:
Uwaga: Nie ma różnicy między opcją trybu binarnego i tekstowego w systemie [sic] GNU.
Wynika to z md5sum
implementacji dostarczanej z GNU coreutils 8.21; Zauważam, że starsza wersja (8.12) nie ma tego powiadomienia, ale przypuszczam, że i tak byłoby to prawdą.
Chociaż AFAICT md5sum
nie jest oficjalnie ustandaryzowany (np. Przez POSIX), jest dostępny na różnych platformach w różnych implementacjach i oczywiście jest pewien wysiłek, aby uczynić je zgodnymi ze sobą w celu ułatwienia korzystania z różnych systemów.
W związku z tym norma ISO / ANSI C obejmuje funkcje strumienia wysokiego poziomu do uzyskiwania dostępu do plików. W ramach standardu są one dostępne w każdym systemie operacyjnym, który implementuje ISO C poprzez bibliotekę współdzieloną lub kompilator. Ponieważ prawie wszystkie systemy operacyjne mają to dostępne (i same są najczęściej pisane w C), jest to rodzaj uniwersalnego języka używanego do wdrażania potencjalnie bardzo przenośnego oprogramowania.
Biorąc pod uwagę to, co robi, byłoby całkowicie możliwe napisanie takiego md5sum
, który skompilowałby się i działałby na dowolnym systemie operacyjnym. Nie twierdzę, że jest to prawdą w przypadku wersji GNU coreutils, ale jedną z wyżej wymienionych funkcji strumienia plików wysokiego poziomu fopen()
jest nakazana przez ISO C do włączenia b
przełącznika używanego do otwierania pliku w celu wskazania, że jest on otwierany jako plik binarny plik". To, co może oznaczać lub wymagać od systemu, nie jest określone w standardzie, po prostu musi istnieć, aby można było z niego korzystać w systemie, w którym może istnieć jakiś ( dowolny ) powód.
Nie ma takiego powodu w systemach operacyjnych typu Linux / POSIX / * nix, więc przełącznik nic nie robi. Ze specyfikacji POSIX (nadzbiór ISO C) dla fopen () :
Znak „b” nie ma wpływu, ale jest dozwolony w przypadku zgodności ze standardem ISO C.
Tak więc całkowicie przenośna md5sum
implementacja może korzystać z funkcji strumienia plików wysokiego poziomu ISO, ponieważ nie ma innych metod uzyskiwania dostępu do plików w ISO C (większość platform, w tym te z reklamacjami POSIX, również ma własne metody niższego poziomu, ale ich użycie nie mogą być przenośne, ponieważ nie znajdują się w ISO C), i powinny również implementować flagi -b
i, -t
aby dodać lub nie dodawać b
opcji fopen()
podczas odczytu pliku. W systemach, w których jest to bez znaczenia, nie będzie to miało znaczenia.
Ponownie nie mówię, że md5sum GNU jest napisany w tak całkowicie przenośny sposób lub pochodzi od takiego, który jest, ale oczywiście stara się pod względem operacyjnym zachować zgodność z takim, który jest. Zauważ, że posiadanie flagi, która nic nie robi, to nie to samo, co brak flagi - w pierwszym przypadku jest określone, że jest w porządku, ale nic nie rób, podczas gdy w późniejszym przypadku użycie jej może być błędem lub prowadzić do nieokreślonego zachowania .