int main(int argc, char *argv[])
{
FILE *fp = fopen("a.txt", "wt");
fprintf(fp, "AAAA");
// No flush. and No close
raise(SIGTERM);
exit(EXIT_SUCCESS);
}
result: No data has written to a.txt
Tại sao dữ liệu không được chuyển sang tệp khi thoát khỏi quá trình?
tôi mong đợi điều này là tốt. Bởi vì hệ thống sẽ đóng tập tin xử lý và sau đó trình điều khiển hệ thống tập tin xóa sạch dữ liệu chưa được lưu trong trình xử lý Đóng của bạn. Nhưng không phải vậy. Tôi đã thử nghiệm mã này trên EXT4, ubuntu 11.10
Câu hỏi: Tôi nghĩ TẤT CẢ hệ thống tập tin phải xóa dữ liệu chưa được dọn dẹp khi xử lý gần.
Posix không có quy tắc?
Tái bút Mã này làm việc tốt (đỏ mặt tốt) trên NTFS, Win7
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE h = CreateFile(L"D:\\a.txt", GENERIC_READ|GENERIC_WRITE,
0, 0, OPEN_ALWAYS, 0, 0);
BYTE a[3];
memset(a, 'A', 3);
DWORD dw;
WriteFile(h, (PVOID)a, 3, &dw, 0);
TerminateProcess(GetCurrentProcess(), 1);
return 0;
}
Edit:
Tôi đã thử nghiệm nó một lần nữa với hệ thống gọi write
. Và nó đã được rửa sạch.
int main(int argc, char** argv)
{
int fd = open("a.txt", O_CREAT|O_TRUNC|O_WRONLY);
char buf[3];
memset(buf, 'A', 3);
size_t result = write(fd, buf, 3);
raise(SIGTERM);
exit(EXIT_SUCCESS);
return 0;
}
Cảm ơn, tôi sẽ kiểm tra lại với các cuộc gọi hệ thống, chứ không phải crt khi tôi về nhà – Benjamin