如何将特定数量的空字节附加到文件?

我有一个脚本写入几个文件,但我需要他们一个特定的大小。 所以我想知道是否有一种方法,通过使用标准的命令行工具(例如,从/dev/zero复制)附加特定数量的空字节到文件?

truncatedd快得多。 要使用10个字节增长文件,请使用:

  truncate -s +10 file.txt 

你也可以试试这个

 dd if=/dev/zero bs=1 count=NUMBER >> yourfile 

这将从/ dev / zero读取并附加到NUMBER字节的文件。

以下是仅使用dd将10MB添加到文件的示例。

 [root@rhel ~]# cp /etc/motd ./test [root@rhel ~]# hexdump -C test |tail -5 000003e0 0a 0a 3d 3d 3d 3d 3e 20 54 65 78 74 20 6f 66 20 |..====> Text of | 000003f0 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 |this message is | 00000400 69 6e 20 2f 65 74 63 2f 6d 6f 74 64 20 3c 3d 3d |in /etc/motd <==| 00000410 3d 3d 0a |==.| 00000413 [root@rhel ~]# dd if=/dev/zero of=/root/test ibs=1M count=10 obs=1M oflag=append conv=notrunc 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.0208541 s, 503 MB/s [root@rhel ~]# hexdump -C test |tail -5 00000410 3d 3d 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 |==..............| 00000420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00a00410 00 00 00 |...| 00a00413 

我的第一个猜测是:

 dd if=/dev/zero of=myfile bs=1 count=nb_of_bytes seek=$(stat -c%s myfile) 

基本上,这个命令告诉dd在文件末尾“去”,并添加一些先前从/ dev / zero读取的字节。

问候,

 cat "your file" /dev/zero | head -c "total number of bytes" 

要么

 head -c "number of bytes to add" /dev/zero >> "your_file" 

并更容易地计算大小:

 head -c $(( "total number of bytes" - $(stat -c "%s" "your_file") )) /dev/zero >> "your_file" 

如果你用空字节填充你的文件,我的猜测是你正在用C中的char *来操作文件。如果是这样的话,你可能不需要用空字节来填充文件,只需要在文件的结尾,然后用随机字节填充它可能就足够了。 在这种情况下,下面的C程序将非常有效(只能用于小于第二个参数的文件,否则数据将被覆盖)。 它甚至可以做你想要的(用空字节填充),因为lseek函数定义如下:

lseek()函数应允许将文件偏移量设置为超出文件中现有数据的末尾。 如果稍后写入数据,则间隔中数据的后续读取将返回值为0的字节,直到数据实际写入间隙。

在这种情况下,第一次调用lseekwrite可以被删除。 但是testing应该在你的系统上完成…

 #include <fcntl.h> #include <unistd.h> #include <stdlib.h> /* 1st parameter: a file name, 2nd parameter: a file size. */ int main(int argc, char ** args) { int nfd = open(args[1], O_WRONLY); lseek(nfd, 0, SEEK_END); write(nfd, "\0", 1); lseek(nfd, atoi(args[2]) - 1, SEEK_SET); write(nfd, "\0", 1); close(nfd); return 0; }