Komenda md5sum tryb binarny i tekstowy


13

Komenda GNU md5summa dwa tryby: tryb binarny i tryb tekstowy . Myślę, że różnica polega tylko na tym, jak obsługiwane są znaki nowej linii? Czy mam rację?

W systemie GNU / Linux oba tryby zawsze dają taki sam wynik, więc jedynym zastosowaniem opcji -bi -tjest wskazanie flagi ( *lub ) użytej przed nazwą pliku?

W jakich okolicznościach tryby mogą dawać różne wyniki? W systemach Windows / MacOS? (Dostępne wersje dla tych platform?)

Odpowiedzi:


11

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 md5sumimplementacji 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 md5sumnie 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 bprzełą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 md5sumimplementacja 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 -bi, -taby dodać lub nie dodawać bopcji 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 .


1
Dlaczego te opcje są dodawane, jeśli są bezużyteczne?
zamrożony płomień

1
Dodałem kilka akapitów na ten temat (TL; DR ->), aby złożyć skargę na wersje użytkowników md5sum, które mogą być zaznajomione z innymi systemami operacyjnymi, oraz kod wsadowy itp. Napisany dla takich).
Złotowłosa
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.