md5sumコマンドのバイナリモードとテキストモード


13

GNU md5sumコマンドには、バイナリモードとテキストモードの2つのモードがあります。違いは改行文字の処理方法だけだと思いますか?私は正しいですか?

GNU / Linuxでは、2つのモードは常に同じ結果を生成するため、-bおよび-tオプションの唯一の使用は、ファイル名の前に使用されるフラグ(*または)を示すことですか?

どのような状況でモードが異なる結果を生成できますか?Windows / MacOSシステムでは?(これらのプラットフォームのバージョンは入手可能ですか?)

回答:


11

GNU / Linuxでは、2つのモードは常に同じ結果を生成します

はい、明示的に。からman md5sum

注: [sic] GNUシステムでは、バイナリモードとテキストモードのオプションに違いはありません。

これは、md5sumGNU coreutils 8.21に同梱されている実装によるものです。古いバージョン(8.12)にはこの通知がないことに気づきましたが、とにかく同じことが当てはまると思います。

AFAICT md5sumは(POSIXなどによって)正式に標準化されていませんが、さまざまな実装のさまざまなプラットフォームで利用でき、システム間で使いやすくするために、これらを相互に準拠させる努力が明らかになされています。

これに関連して、ISO / ANSI C標準には、ファイルにアクセスするための高レベルのストリーム関数が含まれています。標準の一部として、これらは、共有ライブラリまたはコンパイラを介してISO Cを実装するすべてのオペレーティングシステムで使用できます。ほとんどすべてのオペレーティングシステムでこれが利用可能であり(ほとんどの場合それ自体はCで記述されています)、非常に移植性の高いソフトウェアの実装に使用される一種の汎用言語です。

それが何をするかを考えると、md5sumコンパイルして任意のオペレーティングシステムで動作するを書くことは完全に実現可能です。これがGNU coreutilsバージョンに当てはまるとは主張していませんがfopen()、前述の高レベルファイルストリーム関数の1つはです。これは、ISO Cによってb、ファイルを開くときに使用されるスイッチを含めて、ファイルが「バイナリとして」開かれていることを示すように指示されています。ファイル"。システム何を意味するか、またはシステムに必要とするかは、標準で規定されていません何らかの理由でシステムで使用できるように存在する必要があるだけです。

linux / POSIX / * nixスタイルのオペレーティングシステムにはそのような理由はないため、スイッチは何もしません。fopen()のPOSIX仕様(ISO Cのスーパーセット)から

文字 'b'は無効ですが、ISO C標準への準拠が許可されています。

したがって、md5sumISO Cのファイルにアクセスする方法は他にないため、完全に移植可能な実装ではISO高レベルファイルストリーム関数を使用できます(POSIX準拠のファイルを含むほとんどのプラットフォームには、独自の低レベルメソッドもありますが、これらを使用するとISO Cにないため移植性がありません。また、ファイルを読み取るときにオプションを追加するかどうかを指定するフラグ-b-tフラグも実装する必要があります。それが無意味なシステムでは、何の違いもありません。bfopen()

繰り返しますが、GNUのmd5sumがそのような完全に移植可能な方法で記述されている、またはその方法から派生していると言っているのではありませんが、明らかに、その操作性において、ある方法に準拠しようとしています。何もしないフラグがあることは、フラグがないことと同じではないことに注意してください-前者の場合、それは大丈夫であるが何もしないように指定されていますが、後者の場合、それを使用するとエラーになるか、未定義の動作につながる可能性があります。


1
これらのオプションが役に立たない場合、なぜ追加されるのですか?
冷凍火炎

1
これについていくつかの段落を追加しました(TL; DR-> md5sumのバージョンに不満を言うために、ユーザーは他のオペレーティングシステムから慣れている可能性があり、そのために記述されたバッチコードなど)。
goldilocks 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.