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