Si está rellenando su archivo con bytes nulos, supongo que está manipulando el archivo en a char *
en C. Si este es el caso, es posible que no necesite rellenar el archivo con bytes nulos, solo agregando un byte nulo al final del archivo y luego rellenarlo con bytes aleatorios podría ser suficiente. En este caso, el siguiente programa C sería muy eficiente (para usarse solo en archivos más pequeños que el segundo parámetro; de lo contrario, los datos se sobrescribirán). Incluso podría hacer lo que quiera (relleno con bytes nulos) ya que la lseek
definición de la función establece que:
La función lseek () permitirá que el desplazamiento del archivo se establezca más allá del final de los datos existentes en el archivo. Si los datos se escriben más tarde en este punto, las lecturas subsiguientes de datos en el intervalo devolverán bytes con el valor 0 hasta que los datos se escriban realmente en el intervalo.
En este caso, la primera llamada a lseek
y write
podría eliminarse. Pero las pruebas deben hacerse en su sistema primero ...
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
/* 1st parameter: a file name, 2nd parameter: a file size. */
int main(int argc, char ** args) {
int nfd = open(args[1], O_WRONLY);
lseek(nfd, 0, SEEK_END);
write(nfd, "\0", 1);
lseek(nfd, atoi(args[2]) - 1, SEEK_SET);
write(nfd, "\0", 1);
close(nfd);
return 0;
}