Dosyanızı boş baytlarla dolduruyorsanız, benim tahminim, dosyayı bir char *
C'de değiştirdiğinizdir. Bu durumda, dosyayı boş baytlarla doldurmanız gerekmeyebilir, sadece sonunda boş bir bayt eklenmesi gerekmeyebilir. Dosyanın ve ardından rastgele bayt ile doldurma yeterli olabilir. Bu durumda, C programı fermanı çok verimli olacaktır (sadece 2. parametreden daha küçük dosyalarda kullanılacak, aksi halde verinin üzerine yazılacaktır). lseek
İşlev tanımının belirttiği gibi, istediğinizi yapabilir (boş baytla doldurma) :
Lseek () işlevi, dosya ofsetinin dosyada mevcut verinin sonunun ötesinde ayarlanmasına izin verir. Veriler daha sonra bu noktada yazılırsa, boşluktaki daha sonraki veri okumaları, veriler gerçekte boşluğa yazılana kadar 0 değeri ile bayt döndürür.
Bu durumda 1. çağrı lseek
ve write
kaldırılabilir. Ancak sisteminizde 1. testler yapılmalı ...
#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;
}