dd
注释选项的联机帮助页swab
swab swap every pair of input bytes
Run Code Online (Sandbox Code Playgroud)
为什么?
不要问我想做什么——我没有特别做什么,我只是在挠头。如果要提供交换,为什么不为所有字长提供交换?不是我需要那个,但如果我们只是交换 2 个相邻字节,它必须与特定的硬件场景相关联。为什么不在手册或文档中记录info
?
Gil*_*il' 17
因为那是它的初衷。用创建 Unix 的团队负责人Douglas McIlroy在A Research UNIX Reader: Annotated Excerpts from the Programmer's Manual, 1971-1986 中的话来说:
DD (v5 第 74 页)
最初用于在 DEC 计算机的 ASCII、小端字节流世界和 IBM 的 EBCDIC、大端、阻塞世界之间转换文件,dd 被赋予了适当的混蛋语法(Thompson,v5)。派克注意到了一个文化怪癖。就像家庭延续孩子们古怪的谚语一样,用户习惯于使用 JCL 式的公式来调用dd
dd if=input of=output
,或者也许使用cat input | dd of=output
,但很少使用基本的话语dd <input >output
。
“v5 page 74”指的是Unix v5 手册(本 PDF 的第 51 页)。在相应的源代码也在线。
EBCDIC是 IBM 机器上使用的字符编码¹。当时它和ASCII一样重要。ASCII 和 EBCDIC 都以 8 位字节对字符进行编码。IBM 和 DEC 机器都有 16 位字。(实际上还有其他字长,尤其是 18 和 36,但dd
在编写时考虑了 16 位字。)该目的的现代模拟将使用iconv。
dd
很快就不再重要的最初目的:它成为一种逐块复制二进制数据的方法,尤其是向或从无法逐字节访问的磁带驱动器复制。就此而言,dd
今天几乎无关紧要:dd
在旧的 unices 上很有用,其中诸如cat
,head
和tail
仅适用于文本文件的工具(它们逐行处理数据,因此一行必须适合少量内存,而它们没有) t 支持空字节),但在现代 unices 上,这些工具通常支持二进制文件。
无论如何,没有人发现扩展dd
到其他字节顺序更改场景很有用。部分原因是随着计算机变得越来越普遍,以独立于机器的方式定义数据格式变得越来越普遍。尽管现在时不时仍然需要字节序转换,但很少在整个文件上使用它:通常只有部分数据是面向字的,而其他部分是面向字节的,需要保持原样。
¹或者更确切地说是一系列编码,但这与此处无关。
归档时间: |
|
查看次数: |
1176 次 |
最近记录: |