Nếu bạn đang đệm tệp của mình bằng byte rỗng, tôi đoán là bạn đang thao tác với tệp trong char *
C. Nếu đây là trường hợp, bạn có thể không cần phải đệm tệp bằng byte rỗng, chỉ thêm một byte null vào cuối của tập tin và sau đó đệm nó với các byte ngẫu nhiên có thể là đủ. Trong trường hợp này, phần dưới của chương trình C sẽ rất hiệu quả (chỉ được sử dụng trên các tệp nhỏ hơn tham số thứ 2, nếu không dữ liệu sẽ bị ghi đè). Nó thậm chí có thể làm những gì bạn muốn (đệm bằng byte rỗng) khi lseek
định nghĩa hàm nói rằng:
Hàm lseek () sẽ cho phép bù tập tin được đặt ngoài phần cuối của dữ liệu hiện có trong tệp. Nếu dữ liệu sau đó được ghi vào thời điểm này, các lần đọc dữ liệu tiếp theo trong khoảng trống sẽ trả về các byte có giá trị 0 cho đến khi dữ liệu thực sự được ghi vào khoảng trống.
Trong trường hợp này, cuộc gọi đầu tiên đến lseek
và write
có thể được gỡ bỏ. Nhưng các bài kiểm tra nên được thực hiện trên hệ thống của bạn ...
#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;
}