В 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 написан таким полностью переносимым способом или получен из того, что есть, но, очевидно, он пытается соответствовать в своей работоспособности тому, что есть. Обратите внимание, что наличие флага, который ничего не делает, не то же самое, что и отсутствие флага - в первом случае указывается, что он в порядке, но ничего не делает, тогда как в последнем случае его использование может быть ошибкой или приводить к неопределенному поведению. ,