md5sum perintah biner dan mode teks

13

md5sumPerintah GNU memiliki dua mode: mode biner dan mode teks . Saya kira perbedaannya hanya pada bagaimana karakter baris baru ditangani? Apakah saya benar?

Pada GNU / Linux, kedua mode selalu menghasilkan hasil yang sama, jadi satu-satunya penggunaan -bdan -topsi adalah untuk menunjukkan flag ( *atau ) yang digunakan sebelum nama file?

Dalam keadaan apa mode dapat menghasilkan hasil yang berbeda? Pada sistem Windows / MacOS? (Versi untuk platform ini tersedia?)

beku-api
sumber

Jawaban:

11

Pada GNU / Linux, kedua mode selalu menghasilkan hasil yang sama

Ya, secara eksplisit. Dari man md5sum:

Catatan: Tidak ada perbedaan antara opsi mode biner dan teks pada sistem GNU [sic].

Ini dari md5sumimplementasi yang dikirimkan dengan GNU coreutils 8.21; Saya melihat versi yang lebih lama (8.12) tidak memiliki pemberitahuan ini tetapi saya menganggap hal yang sama juga berlaku.

Meskipun AFAICT md5sumtidak secara resmi distandarisasi (misalnya, oleh POSIX), AFAICT tersedia di berbagai platform dalam berbagai implementasi dan jelas ada beberapa upaya untuk membuat ini sesuai satu sama lain untuk kemudahan penggunaan di seluruh sistem.

Sehubungan dengan ini, ISO / ANSI C Standard mencakup fungsi aliran tingkat tinggi untuk mengakses file. Sebagai bagian dari standar, ini tersedia pada sistem operasi apa pun yang menerapkan ISO C melalui perpustakaan bersama atau kompiler. Karena hampir semua sistem operasi memiliki ini tersedia (dan itu sendiri paling sering ditulis dalam C), itu adalah semacam bahasa universal yang digunakan untuk mengimplementasikan perangkat lunak yang berpotensi sangat portabel.

Mempertimbangkan apa yang dilakukannya, akan sangat layak untuk menulis sebuah md5sumyang akan dikompilasi dan bekerja pada sistem operasi apa pun. Saya tidak mengklaim ini benar untuk versi GNU coreutils, tetapi salah satu fungsi aliran file tingkat tinggi yang disebutkan sebelumnya adalah fopen(), yang diamanatkan oleh ISO C untuk memasukkan sebuah bsaklar yang digunakan dalam membuka file untuk menunjukkan bahwa itu sedang dibuka "sebagai biner mengajukan". Apa yang mungkin berarti atau memerlukan dari sistem tidak ditentukan oleh standar, itu hanya perlu ada sehingga dapat digunakan pada sistem di mana mungkin ada beberapa ( ada ) alasan untuk itu.

Tidak ada alasan seperti itu pada sistem operasi linux / POSIX / * nix-style, jadi switch tidak melakukan apa-apa. Dari spec POSIX (superset dari ISO C) untuk fopen () :

Karakter 'b' tidak akan berpengaruh, tetapi diizinkan untuk kesesuaian standar ISO C.

Jadi, md5sumimplementasi yang sepenuhnya portabel mungkin menggunakan fungsi aliran file tingkat tinggi ISO, karena tidak ada metode lain untuk mengakses file dalam ISO C (kebanyakan platform, termasuk yang keluhan POSIX, memiliki metode tingkat rendah mereka sendiri juga, tetapi menggunakan ini akan tidak portabel karena mereka tidak dalam ISO C), dan itu juga harus menerapkan -bdan -ttanda untuk menambah atau tidak menambahkan bopsi fopen()ketika membaca file. Pada sistem yang tidak ada artinya, tidak akan ada bedanya.

Sekali lagi, saya tidak mengatakan md5sum GNU ditulis dengan cara yang benar-benar portabel atau berasal dari yang, tetapi jelas ia berusaha untuk mematuhi, dalam operabilitasnya, dengan yang ada. Perhatikan bahwa memiliki bendera yang tidak melakukan apa-apa tidak sama dengan tidak memiliki bendera - dalam kasus sebelumnya, itu ditetapkan baik-baik saja tetapi tidak melakukan apa-apa, sedangkan dalam kasus kemudian menggunakannya dapat menjadi kesalahan atau menyebabkan perilaku yang tidak terdefinisi .

goldilocks
sumber
1
Mengapa opsi ini ditambahkan jika tidak berguna?
Api beku
1
Saya telah menambahkan beberapa paragraf di atas tentang ini (TL; DR -> untuk membuatnya komplain dengan versi pengguna md5sum yang mungkin akrab dengan sistem operasi lain, dan kode batch, dll. Ditulis untuk itu).
goldilocks