Bộ đệm sẽ tự động được xóa vào đĩa khi một quá trình thoát?
Nói chung câu trả lời là không .
Nó phụ thuộc vào lệnh. Như các câu trả lời khác đề cập, nếu lệnh không đệm nội bộ dữ liệu, tất cả dữ liệu sẽ có sẵn khi lệnh kết thúc.
Nhưng hầu hết, nếu không phải tất cả, các thư viện I / O tiêu chuẩn sẽ làm xuất chuẩn bộ đệm theo mặc định (ở một mức độ nào đó) và đưa ra các đảm bảo khác nhau về việc tự động xóa bộ đệm khi đóng ứng dụng.
C đảm bảo rằng một lối thoát bình thường sẽ tuôn ra bộ đệm . Lối thoát thông thường có nghĩa là có nghĩa exit
là được gọi - hoặc rõ ràng hoặc quay trở lại main
. Tuy nhiên, lối ra bất thường có thể phá vỡ cuộc gọi này (và do đó để lại bộ đệm không bị xóa phía sau).
Đây là một ví dụ đơn giản:
#include <signal.h>
#include <stdio.h>
int main() {
printf("test");
raise(SIGABRT);
}
Nếu bạn biên dịch nó và thực thi nó, test
sẽ không nhất thiết phải được ghi vào thiết bị xuất chuẩn.
Các ngôn ngữ lập trình khác thậm chí còn đảm bảo ít hơn: ví dụ Java, không tự động xóa khi kết thúc chương trình . Nếu bộ đệm đầu ra chứa một dòng bị hủy, thì nó có thể bị mất, trừ khi System.out.flush()
được gọi một cách rõ ràng.
Điều đó nói rằng, cơ thể câu hỏi của bạn hỏi cái gì đó hơi khác nhau: nếu dữ liệu đến trong các tập tin ở tất cả , nó nên làm như vậy ngay sau khi chấm dứt lệnh (tùy thuộc vào sự cẩn thận mô tả trong các câu trả lời khác).