修改 128 字节

Mar*_*ark 5 video linux php

我必须在 Linux Web 服务器上替换某些二进制文件的前 128 个字节。

这些文件的大小约为 5Gb,我只需要重写头字节。使用 Linux 本机命令甚至 PHP 执行此操作的最佳方法是什么?

Pau*_*aul 13

dd是一个简单的方法。

dd if=128bytefile of=videofiletofix.mkv bs=128 count=1 conv=notrunc
Run Code Online (Sandbox Code Playgroud)

因此,这将占用128bytefile一个名为videofiletofix.mkv.

bs参数表示一次复制 128 个字节,该count参数表示复制一个这样的 128 字节块。该conv=notrunc参数很重要 - 没有它,dd会将输出文件截断为复制数据的长度(此处为 128 字节),这绝对不是您想要的。


use*_*686 10

只需以“追加”或类似模式打开文件,寻找位置 0,然后写入数据。


“Linux 本机命令”:系统调用(或它们的 libc 包装器)尽可能接近。

#include <fcntl.h>
#include <unistd.h>

无效主(){
    char buf[128] = "这个和那个";
    int fd =打开(“文件”,O_WRONLY);
    lseek (fd, 0, SEEK_SET);
    (fd, &buf, sizeof(buf));
    关闭(fd);
}

PHP:

<?php
$buf = "这个和那个";
$fh = fopen ("file", "a" "r+");
fseek ($fh, 0);
fwrite ($fh, $buf);
fclose ($fh);