我必须在 Linux Web 服务器上替换一些二进制文件的前 128 个字节。
这些文件的大小约为 5Gb,我只需重写标头字节。使用 Linux 本机命令甚至 PHP 执行此操作的最佳方法是什么?
答案1
只需以“追加”或类似模式打开文件,寻找位置 0,然后写入数据。
“Linux 本机命令”:系统调用(或它们的 libc 包装器)尽可能接近。
#包括 <fcntl.h> #包括 <unistd.h> 无效主(){ char buf[128] = "这个和那个"; int fd =打开("文件", O_WRONLY); 查找(fd, 0,SEEK_SET); 写(fd,&buf,sizeof(buf)); 关闭(FD); }
PHP的:
<?php $buf = "这个和那个"; $fh =打开(“文件”,“a”“r+”); 查找($fh,0); 写入($fh,$buf); 关闭($fh);
答案2
这dd
是一个简单的方法。
dd if=128bytefile of=videofiletofix.mkv bs=128 count=1 conv=notrunc
因此,这将获取名为 的文件的前 128 个字节128bytefile
并覆盖名为 的文件的前 128 个字节videofiletofix.mkv
。
参数bs
表示一次复制 128 个字节,参数count
表示复制一个这样的 128 字节块。该conv=notrunc
参数很重要——如果没有它,dd
输出文件将截断为复制数据的长度(此处为 128 字节),这绝对是不是你想要什么。