Команда md5sum двоичный и текстовый режим


13

Команда GNU md5sumимеет два режима: двоичный режим и текстовый режим. Я думаю, разница только в том, как обрабатываются символы новой строки? Я прав?

В GNU / Linux эти два режима всегда дают один и тот же результат, поэтому единственное использование -bи -tпараметров - это указание флага ( *или ), используемого перед именем файла?

При каких обстоятельствах режимы могут давать разные результаты? В системах Windows / MacOS? (Доступны версии для этих платформ?)

Ответы:


11

В GNU / Linux два режима всегда дают один и тот же результат

Да, явно. От man md5sum:

Примечание. В системе [sic] GNU нет разницы между опцией двоичного и текстового режима.

Это из md5sumреализации, которая поставляется с GNU coreutils 8.21; Я заметил, что более старая версия (8.12) не имеет этого уведомления, но я предполагаю, что то же самое будет верно в любом случае.

Хотя AFAICT md5sumофициально не стандартизирован (например, POSIX), он доступен на различных платформах в различных реализациях, и, очевидно, предпринимаются определенные усилия, чтобы сделать их совместимыми друг с другом для удобства использования в разных системах.

В связи с этим стандарт ISO / ANSI C включает функции потокового уровня высокого уровня для доступа к файлам. Как часть стандарта, они доступны в любой операционной системе, которая реализует ISO C через общую библиотеку или компилятор. Поскольку почти во всех операционных системах это доступно (и сами они чаще всего пишутся на C), это своего рода универсальный язык, используемый для реализации потенциально очень портативного программного обеспечения.

Учитывая то, что он делает, было бы вполне возможно написать, md5sumкоторый будет компилироваться и работать на любой операционной системе. Я не утверждаю, что это верно для версии GNU coreutils, но одна из функций высокоуровневого файлового потока, упомянутых ранее, заключается в том fopen(), что ISO C обязывает включать bпереключатель, используемый при открытии файла, чтобы указать, что он открывается "как двоичный файл". файл". То, что это может означать или требовать от системы , не предусмотрено стандартом, оно просто должно существовать, чтобы его можно было использовать в системе, где для этого может быть какая-то ( любая ) причина.

В операционных системах типа linux / POSIX / * nix такой причины нет, поэтому коммутатор ничего не делает. Из спецификации POSIX (расширенный набор ISO C) для fopen () :

Символ 'b' не должен иметь никакого эффекта, но разрешен для соответствия стандарту ISO C.

Таким образом, полностью переносимая md5sumреализация может использовать функции потокового файла высокого уровня ISO, поскольку нет других методов для доступа к файлам в ISO C (большинство платформ, включая жалобы POSIX, также имеют свои собственные методы более низкого уровня, но их использование не быть портативными , потому что они не находятся в ISO C), и он должен также реализовать -bи -tфлаги , чтобы добавить или не добавить bопцию , fopen()когда он читает файл. В системах, где это бессмысленно, это не будет иметь никакого значения.

Опять же, я не говорю, что GNU md5sum написан таким полностью переносимым способом или получен из того, что есть, но, очевидно, он пытается соответствовать в своей работоспособности тому, что есть. Обратите внимание, что наличие флага, который ничего не делает, не то же самое, что и отсутствие флага - в первом случае указывается, что он в порядке, но ничего не делает, тогда как в последнем случае его использование может быть ошибкой или приводить к неопределенному поведению. ,


1
Почему эти опции добавляются, если они бесполезны?
замерзшее пламя

1
Я добавил несколько абзацев выше об этом (TL; DR ->, чтобы жаловаться на версии пользователей md5sum, которые могут быть знакомы из других операционных систем, а также пакетный код и т. Д., Написанные для этого).
Златовласка
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.