Se você estiver preenchendo seu arquivo com bytes nulos, meu palpite é que você está manipulando o arquivo em um char *
em C. Se esse for o caso, talvez você não precise preencher o arquivo com bytes nulos, adicionando apenas um byte nulo no final do arquivo e preenchê-lo com bytes aleatórios pode ser suficiente. Nesse caso, o programa C abaixo seria muito eficiente (para ser usado apenas em arquivos menores que o 2º parâmetro, caso contrário, os dados seriam substituídos). Pode até fazer o que você deseja (preenchimento com bytes nulos), pois a lseek
definição da função afirma que:
A função lseek () deve permitir que o deslocamento do arquivo seja definido além do final dos dados existentes no arquivo. Se os dados forem posteriormente gravados nesse ponto, as leituras subsequentes dos dados no intervalo retornarão bytes com o valor 0 até que os dados sejam realmente gravados no intervalo.
Nesse caso, a 1ª chamada lseek
e write
poderá ser removida. Mas os testes devem ser feitos no seu sistema primeiro ...
#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;
}