หากคุณกำลังขยายไฟล์ของคุณด้วย null null ฉันเดาว่าคุณกำลังจัดการไฟล์ใน a char *
ถ้าเป็นกรณีนี้คุณอาจไม่จำเป็นต้อง pad ไฟล์ด้วย null null เพียงเพิ่ม null null ที่ท้าย ของไฟล์แล้วแพ็ดดิงด้วยไบต์แบบสุ่มอาจเพียงพอ ในกรณีนี้โปรแกรม C ร้องจะมีประสิทธิภาพมาก (จะใช้เฉพาะกับไฟล์ที่เล็กกว่าพารามิเตอร์ที่ 2 มิฉะนั้นข้อมูลจะถูกเขียนทับ) มันอาจทำสิ่งที่คุณต้องการ (padding with null bytes) ตามที่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;
}