垃圾字符“^@”显示使用 vim 但使用 cat 显示正确的数据

垃圾字符“^@”显示使用 vim 但使用 cat 显示正确的数据

我正在尝试将 x.file 数据复制到大小为 32 KB 的虚拟卷中,并尝试再次从同一卷读取 32 KB 到 y.file。使用 cat y.file 时它会显示预期的输出,但每当我使用 vim/vi 查看内容时,它都会显示附加字符“^@”。

在虚拟卷中写入数据的命令。

dd if=/tmp/x.file of=/dev/vv/<vv_id> seek=0 bs=16K count=2

从虚拟卷读取数据的命令。

dd of=/tmp/y.file if=/dev/vv/<vv_id> seek=0 bs=16K count=2

x.file 包含一系列模式,大小为 24 KB。
例如:

如果 x.file PATTERN PATTERN PATTERN

然后 y.filePATTERN PATTERN PATTERN^@^@^@^@

编辑:

现在,我知道显示“^@”字符的原因是什么了。我的输入文件大小小于 32 KB。但仍然怀疑为什么“^@”被填充,因为它可能是任何其他值?有什么具体原因吗?

答案1

来自评论,很明显该文件x.file小于 32768 字节 (32 KiB)。这意味着当dd要求将 32 KiB 写入时/dev/vv/<vv_id>,它将无法从文件中复制全部内容,并且 32 KiB 的最后一位将保持未写入状态。

y.file然后,第二个操作将复制这些未初始化的数据dd,这就是您在编辑器中打开该文件时看到的内容。

^@是编辑器显示空字节的方式。通过阅读dd手册,我不清楚这是否是第一次写入设备的内容dd,或者是否是第一次调用之前设备上已经存在的垃圾数据dd

相关内容