5

Я должен заменить на веб-сервере Linux первые 128 байтов некоторых двоичных файлов.

Файлы имеют размер ~ 5 Гб, и мне просто нужно переписать байты заголовка. Каков наилучший подход для этого с использованием собственных команд Linux или даже PHP?

2 ответа2

13

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 байт), что совершенно точно не то, что вам нужно.

10

Просто откройте файл в "append" или аналогичном режиме, найдите позицию 0, затем запишите свои данные.


"Собственные команды Linux": системные вызовы (или их оболочки libc) настолько близки, насколько это возможно.

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

void main() {
    char buf[128] = "this and that";
    int fd = open("file", O_WRONLY);
    lseek(fd, 0, SEEK_SET);
    write(fd, &buf, sizeof(buf));
    close(fd);
}

PHP:

<?php
$buf = "this and that";
$fh = fopen("file", "a" "r+");
fseek($fh, 0);
fwrite($fh, $buf);
fclose($fh);

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .