5 votes

modifier 128 octets

Je dois remplacer, sur un serveur web Linux, les 128 premiers octets de certains fichiers binaires.

Les fichiers ont une taille de ~ 5Gb et il me suffit de réécrire les octets d'en-tête. Quelle serait la meilleure approche pour faire cela en utilisant les commandes natives de Linux ou même PHP ?

13voto

Oliver Points 125

En dd est une approche simple.

dd if=128bytefile of=videofiletofix.mkv bs=128 count=1 conv=notrunc

Cela prendra donc les 128 premiers octets d'un fichier appelé 128bytefile et écraser les 128 premiers octets d'un fichier appelé videofiletofix.mkv .

En bs indique qu'il faut copier 128 octets à la fois, et le paramètre count indique qu'il faut copier un bloc de 128 octets. Le paramètre conv=notrunc Le paramètre est important - sans lui, dd tronquera le fichier de sortie à la longueur des données copiées (ici, 128 octets), ce qui est très certainement no ce que vous voulez.

10voto

James Mertz Points 390

Il suffit d'ouvrir le fichier en mode "append" ou en mode similaire, de rechercher la position 0, puis d'écrire vos données.


"Commandes natives Linux" : les syscalls (ou leurs enveloppes libc) sont aussi proches que possible.

_#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](http://php.net/fopen)("file", ~~"a"~~ "r+");
[fseek](http://php.net/fseek)($fh, 0);
[fwrite](http://php.net/fwrite)($fh, $buf);
[fclose](http://php.net/fclose)($fh);

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X