Якщо ви додаєте файл з нульовими байтами, я гадаю, що ви маніпулюєте файлом в 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;
}