GNU md5sum
コマンドには2つのモードがあります: binary モードとテキスト モード。違いは改行文字の処理方法だけだと思いますか?私は正しいですか?
GNU / Linuxでは、2つのモードは常に同じ結果を生成するため、-b
を使用するだけです。 および-t
オプションはフラグを示すことです(*
または )ファイル名の前に使用しますか?
どのような状況でモードは異なる結果を生み出すことができますか? Windows / MacOSシステムでは? (これらのプラットフォームのバージョンは利用可能ですか?)
承認された回答:
GNU / Linuxでは、2つのモードは常に同じ結果を生成します
はい、明示的に。 man md5sum
から :
注: [原文のまま]GNUシステムのバイナリモードオプションとテキストモードオプションに違いはありません。
これはmd5sum
からのものです GNUcoreutils8.21に同梱されている実装。古いバージョン(8.12)にはこの通知がないことに気付きましたが、とにかく同じことが当てはまると思います。
AFAICT md5sum
は公式に標準化されておらず(たとえば、POSIXによって)、さまざまな実装のさまざまなプラットフォームで利用可能であり、システム間で使いやすくするために、これらを相互に準拠させるための努力が明らかにあります。
これに関連して、ISO / ANSI C規格には、ファイルにアクセスするための高レベルのストリーム機能が含まれています。標準の一部として、これらは共有ライブラリまたはコンパイラを介してISOCを実装するすべてのオペレーティングシステムで利用できます。ほとんどすべてのオペレーティングシステムでこれが利用可能であるため(そしてそれ自体がほとんどの場合Cで記述されているため)、これは潜在的に非常に移植性の高いソフトウェアを実装するために使用される一種の普遍的な言語です。
それが何をするかを考えると、md5sum
を書くことは完全に実行可能です。 これは、任意のオペレーティングシステムでコンパイルおよび動作します。これがGNUcoreutilsバージョンに当てはまるとは言いませんが、前述の高レベルのファイルストリーム関数の1つはfopen()
です。 、ISOCによってb
を含めることが義務付けられています 「バイナリファイルとして」開かれていることを示すためにファイルを開くときに使用されるスイッチ。それがシステムに何を意味するか、または必要とするかはではありません 規格で規定されているように、存在する必要があるだけなので、システムで使用できる場合があります( )その理由。
linux / POSIX / * nixスタイルのオペレーティングシステムにはそのような理由はないため、スイッチは何もしません。 fopen()のPOSIX仕様(ISO Cのスーパーセット)から:
文字「b」は効果がありませんが、ISOC標準への適合が許可されています。
したがって、完全に移植可能なmd5sum
ISO Cのファイルにアクセスする方法は他にないため、実装ではISO高レベルのファイルストリーム関数を使用する場合があります(POSIX準拠のものを含むほとんどのプラットフォームには独自の低レベルの方法もありますが、これらを使用することは移植性がないためです。 ISO C)には含まれておらず、-b
も実装する必要があります および-t
b
を追加するかどうかを指定するフラグ fopen()
のオプション ファイルを読み取るとき。それが無意味なシステムでは、違いはありません。
繰り返しになりますが、GNUのmd5sumがこのように完全に移植可能な方法で書かれている、またはそれから派生していると言っているわけではありませんが、操作性において、GNUはそのようなものに準拠しようとしています。何もしないフラグがあることは、フラグがないことと同じではないことに注意してください。前者の場合、それは大丈夫であると指定されていますが、何もしませんが、後者の場合、それを使用するとエラーになるか、未定義の動作につながる可能性があります。