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

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

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

GNU / Linuxでは、両方のモードは常に同じ結果を生成するため、オプションの唯一の目的は、ファイル名(または)の-b前に使用されるフラグを表すことです。-t*

どのような状況で、これらのパターンは異なる結果をもたらしますか? Windows / MacOSシステムを使用していますか? (これらのプラットフォームで利用可能なバージョンはありますか?)

ベストアンサー1

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

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

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

これは、md5sumGNU coreutils 8.21に付属の実装から来ています。以前のバージョン(8.12)にはこの通知がないことがわかりましたが、とにかくそうすると思います。

AFAICTはmd5sum正式に標準化されていませんが(POSIXを介して)、さまざまな実装を介してさまざまなプラットフォームで利用可能であり、システム全体で簡単に使用できるように、これらのプラットフォームを互いに互換性にするには明らかに少しの努力が必要です。

これに関して、ISO/ANSI C規格ファイルアクセス用の高度なストリーミング機能が含まれています。これは、標準の一部として共有ライブラリまたはコンパイラを介してISO Cを実装するすべてのオペレーティングシステムで使用できます。この機能はほとんどすべてのオペレーティングシステムで利用可能なので(それ自体はCで書かれることが多い)、移植性に優れたソフトウェアを実装するための汎用言語です。

md5sumその機能を考慮すると、すべてのオペレーティングシステムでコンパイルして実行されるプログラムを書くことが完全に可能です。 GNU coreutilsバージョンでも同様であるとは言いませんが、前述の上位レベルのファイルストリーム機能の1つは、fopen()ISO Cでファイルを開くスイッチを含むb「ファイルを開く」を表示する必要があることです。バイナリファイルとして」。これが意味するものまたはシステム要件は何ですか?いいえ標準では一部(どの)の理由。

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

文字「b」は無効ですが、ISO C規格に準拠することは許可されています。

したがってmd5sum、ISO Cのファイルにアクセスする他の方法がないため、完全に移植可能な実装ではISO上位レベルのファイルストリーム機能を使用できます(POSIX準拠のプラットフォームを含むほとんどのプラットフォームにも独自の下位レベルの方法がありますが、これらのメソッドはISO Cないため、移植性がなく、-bファイルを読み取るときにオプションを追加または-t追加しないようにフラグも実装する必要がありますbfopen()

繰り返しますが、GNUのmd5sumが完全に移植可能な方法で書かれているか派生しているとは言いません。しかし、明らかに操作性の点でこの方法に固執しようとしています。何もしないフラグがあるものとないのは違います。前者の場合は実行するように指定されていますが、何もしませんが、後者の場合はこれを使用するとエラーが発生したり原因になる可能性があります。未定義の動作

おすすめ記事