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 через спільну бібліотеку або компілятор. Оскільки майже всі операційні системи мають це доступне (і самі вони найчастіше написані на С), це різновид універсальної мови, що використовується для реалізації потенційно дуже портативного програмного забезпечення.

З огляду на те, що це робиться, було б цілком реально написати документ, md5sumякий збирався б і працював у будь-якій операційній системі. Я не стверджую, що це стосується версії coreutils GNU, але одна з функцій потоку файлів високого рівня, згадана раніше fopen(), ISO, яка доручає включити bперемикач, який використовується для відкриття файлу, щоб вказати, що він відкривається "як двійковий файл ". Що це може означати або вимагати від системи , не передбачено стандартом, це просто потрібно, щоб воно існувало, щоб його можна було використовувати в системі, де може бути якась ( будь-яка ) причина для цього.

Немає такої причини в операційних системах linux / POSIX / * nix, тому комутатор нічого не робить. З специфікації POSIX (надмножина ISO C) для fopen () :

Символ "b" не повинен мати ефекту, але він дозволений для відповідності стандарту ISO C.

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

Знову ж таки, я не кажу, що md5sum GNU написаний таким повністю портативним способом або є похідним від такого, який є, але очевидно, він намагається відповідати у своїй функціональності тому, що є. Зауважте, що прапор, який нічого не робить, не є тим, що не має прапора - у першому випадку зазначено, що це нормально, але нічого не робити, тоді як у більш пізньому випадку його використання може бути помилкою або призвести до невизначеної поведінки .


1
Чому ці опції додаються, якщо вони марні?
заморожене полум'я

1
Я додав вище про це деякі абзаци (TL; DR ->, щоб подати скаргу на версії користувачів md5sum, можливо, знайомі з інших операційних систем, і пакетний код тощо, написаний для таких).
золотинки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.