C:
สร้างไฟล์ชั่วคราว
วิธีการ:
การสร้างไฟล์ชั่วคราวด้วยภาษาโปรแกรมมิ่ง C สามารถใช้ฟังก์ชันต่างๆ เช่น tmpfile()
และ mkstemp()
การใช้ tmpfile()
: ฟังก์ชันนี้สร้างไฟล์ชั่วคราวที่ไม่ซ้ำกันซึ่งจะถูกลบอัตโนมัติเมื่อโปรแกรมสิ้นสุดหรือไฟล์ถูกปิด
#include <stdio.h>
int main() {
FILE *temp = tmpfile();
if (temp == NULL) {
perror("Failed to create temporary file");
return 1;
}
// เขียนข้อมูลลงไฟล์ชั่วคราว
fputs("This is a test.\n", temp);
// ย้อนกลับและอ่านสิ่งที่เราเขียน
rewind(temp);
char buffer[1024];
while (fgets(buffer, sizeof(buffer), temp) != NULL) {
printf("%s", buffer);
}
// ลบออโต้เมติกเมื่อปิดหรือออกจากโปรแกรม
fclose(temp);
return 0;
}
ผลลัพธ์ตัวอย่าง:
This is a test.
การใช้ mkstemp()
: ให้การควบคุมมากขึ้นเกี่ยวกับตำแหน่งและสิทธิ์ของไฟล์ชั่วคราว จำเป็นต้องใช้สตริงแม่แบบที่ลงท้ายด้วย XXXXXX
ซึ่งจะถูกแทนที่ด้วยลำดับที่ไม่ซ้ำกันเพื่อป้องกันการชนที่ชื่อไฟล์
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main() {
char template[] = "/tmp/mytemp-XXXXXX";
int fd = mkstemp(template);
if (fd == -1) {
perror("Failed to create temporary file");
return 1;
}
printf("Temporary file created: %s\n", template);
// ไฟล์ชั่วคราวที่สร้างด้วย mkstemp() ควรถูกลบด้วยมือ
unlink(template);
close(fd);
return 0;
}
ผลลัพธ์ตัวอย่าง:
Temporary file created: /tmp/mytemp-abc123
ศึกษาลึก
ความคิดของไฟล์ชั่วคราวไม่ใช่เรื่องเฉพาะของ C แต่เป็นฟังก์ชั่นการทำงานที่พบได้ทั่วไปในหลายสภาพแวดล้อมการเขียนโปรแกรมเนื่องจากมีประโยชน์ในการจัดการข้อมูลชั่วคราว ฟังก์ชัน tmpfile()
ซึ่งเป็นมาตรฐานใน ISO C สร้างไฟล์ที่มีชื่อไม่ซ้ำกันในไดเรกทอรีมาตรฐาน แต่การมีอยู่ของมันเป็นเพียงชั่วคราว ทำให้เหมาะสำหรับการดำเนินการที่ปลอดภัยหรือชั่วคราว
ข้อจำกัดหนึ่งของ tmpfile()
คือการพึ่งพาไดเรกทอรีชั่วคราวเริ่มต้นซึ่งอาจไม่เหมาะสมกับทุกแอปพลิเคชันโดยเฉพาะในแง่ของสิทธิ์หรือความปลอดภัย ในทางกลับกัน mkstemp()
อนุญาตให้ระบุไดเรกทอรีและรับรองการสร้างไฟล์ที่ปลอดภัยด้วยชื่อไฟล์ที่ไม่ซ้ำกันโดยการเปลี่ยนสตริงแม่แบบที่ได้รับ นำเสนอโซลูชันที่หลากหลายมากขึ้นแต่ต้องการการจัดการไฟล์ด้วยตนเอง
อย่างไรก็ตาม การสร้างไฟล์ชั่วคราวอาจนำไปสู่ช่องโหว่ด้านความปลอดภัย เช่น สภาวะการแข่งขัน หากไม่ได้รับการดูแลอย่างเหมาะสม tmpfile()
และ mkstemp()
ตอบสนองด้านต่างๆ ของการสร้างไฟล์ชั่วคราวที่ปลอดภัย (การลบอัตโนมัติและการสร้างชื่อที่ปลอดภัย ตามลำดับ) แต่ไม่มีฟังก์ชันใดที่ตอบสนองทุกความต้องการ นักพัฒนาต้องพิจารณาความต้องการด้านความปลอดภัยของแอปพลิเคชั่นของตน รวมถึงช่องโหว่ที่อาจเกิดขึ้นจากไฟล์ชั่วคราว และอาจต้องการนำมาตรการป้องกันเพิ่มเติมเหนือสิ่งที่ฟังก์ชันเหล่านี้ให้มา
ในภาพรวมของการเขียนโปรแกรม ทางเลือกเช่นการจัดเก็บในหน่วยความจำ (เช่น การใช้โครงสร้างข้อมูลไดนามิกหรือไฟล์ที่แมปกับหน่วยความจำ) อาจนำเสนอประสิทธิภาพหรือความปลอดภัยที่ดีกว่าสำหรับการจัดการข้อมูลชั่วคราว อย่างไรก็ตาม ไฟล์ชั่วคราวทางกายภาพยังคงเป็นเครื่องมือสำคัญในหลายสถานการณ์ โดยเฉพาะสำหรับชุดข้อมูลขนาดใหญ่หรือเมื่อการสื่อสารระหว่างกระบวนการเกี่ยวข้อง