「dd」に「swab」機能がある理由

「dd」に「swab」機能がある理由

ddコメントオプションマンページswab

swab   swap every pair of input bytes

なぜ?


私に何をしたいのか尋ねないでください。特別なことをするわけでもなく、ただ頭だけを傷つけるだけです。スワッピングを提供したい場合は、すべての単語サイズに対してスワッピングを提供したいですか?必ずしも必要ではありませんが、隣接する2バイトのみを交換する場合は、特定のハードウェアシナリオに関連付ける必要があります。なぜこれがマニュアルに文書化されていないのですかinfo

答え1

それが元の目的だったから。マロダグラス・マクギロイUnixを作ったチームのリーダーだったUNIX研究資料:The Programmer's Handbook(1971-1986)で注釈付きの抜粋:

DD(v5 74ページ)

ddはもともと、DECコンピュータのASCII、リトルエンディアンバイトストリームワールドとIBMのEBCDIC、ビッグエンディアン、ブロックワールドの間でファイルを変換するためのものですが、適切なパーソナライズされた構文が提供されました(Thompson、v5)。パイクは文化的奇妙さを発見しました。家族が子供たちの奇妙な言葉を続けているように、ユーザーは引用に慣れています。DDJCLスタイルの公式を使用したり、使用したり、dd if=input of=output基本的なcat input | dd of=output談話を使用したりすることはほとんどありませんdd <input >output

「v5 ページ 74」は、次のことを意味します。Unix v5 マニュアル(このPDFの51ページ)。これ対応するソースコードまた、オンライン。

EBCDICIBM システムで使用される文字エンコーディング。それは同じように重要ですASCIIコードそれから。 ASCIIとEBCDICの両方が文字を8ビットバイトにエンコードします。 IBMとDECシステムはどちらも16ビットの単語を使用しました。 (実際には異なる単語サイズ、特に18と36がありますが、dd16ビットの単語を念頭に置いて書かれています。)この目的のための最新のシミュレーションでは、以下を使用します。

元の目的はddすぐに重要ではなくなりました。特にバイト単位でアクセスできないテープドライブ間でバイナリデータをブロック単位にコピーする方法となりました。したがって、dd今日は基本的に関係がありません。ツールがテキストファイルのような作業だけをするdd古い unices では有用でしたcat(データを 1 行ずつ処理したため 1 行は少量のメモリに入らなければなりませんが、そうではありません) ヌルバイト)、しかし最新のユニスでは、これらのツールは通常バイナリファイルをサポートします。headtail

とにかく、dd他のバイト順序変更シナリオに拡張することが役に立つと思った人は誰もいません。その理由の1つは、コンピュータが一般化するにつれて、コンピュータとは独立した方法でデータ型を定義することがより一般化されていることです。今日でもエンディアン変換が必要ですが、ファイル全体ではほとんど使用されません。通常、データの一部のみがワード指向であり、他の部分はバイト指向であるため、そのままにしてください。

おそらく、エンコードシーケンスと言う方が正確です。しかし、ここでは関係ありません。

関連情報