回答:
GNU / Linuxでは、2つのモードは常に同じ結果を生成します
はい、明示的に。からman md5sum
:
注: [sic] GNUシステムでは、バイナリモードとテキストモードのオプションに違いはありません。
これは、md5sum
GNU 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標準への準拠が許可されています。
したがって、md5sum
ISO Cのファイルにアクセスする方法は他にないため、完全に移植可能な実装ではISO高レベルファイルストリーム関数を使用できます(POSIX準拠のファイルを含むほとんどのプラットフォームには、独自の低レベルメソッドもありますが、これらを使用するとISO Cにないため移植性がありません。また、ファイルを読み取るときにオプションを追加するかどうかを指定するフラグ-b
と-t
フラグも実装する必要があります。それが無意味なシステムでは、何の違いもありません。b
fopen()
繰り返しますが、GNUのmd5sumがそのような完全に移植可能な方法で記述されている、またはその方法から派生していると言っているのではありませんが、明らかに、その操作性において、ある方法に準拠しようとしています。何もしないフラグがあることは、フラグがないことと同じではないことに注意してください-前者の場合、それは大丈夫であるが何もしないように指定されていますが、後者の場合、それを使用するとエラーになるか、未定義の動作につながる可能性があります。