Если вы дополняете свой файл нулевыми байтами, я предполагаю, что вы манипулируете файлом в a char *
в C. Если это так, то вам может не потребоваться заполнять файл нулевыми байтами, добавляя только нулевой байт в конце файла, а затем заполнить его случайными байтами может быть достаточно. В этом случае приведенная ниже C-программа будет очень эффективной (будет использоваться только для файлов, размер которых меньше 2-го параметра, в противном случае данные будут перезаписаны). Он может даже делать то, что вы хотите (заполнение нулевыми байтами), поскольку lseek
определение функции гласит:
Функция lseek () должна позволять устанавливать смещение файла за пределы конца существующих данных в файле. Если в этот момент данные записываются позже, последующие чтения данных в промежутке должны возвращать байты со значением 0, пока данные фактически не будут записаны в промежуток.
В этом случае 1-й вызов lseek
и write
может быть удален. Но тесты должны быть сделаны на вашей системе 1-го ...
#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;
}