修改128字节

修改128字节

我必须在 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 字节),这绝对是不是你想要什么。

相关内容