2010-05-04 28 views
5

Tôi đang thiết kế một hệ thống sẽ ghi dữ liệu chuỗi thời gian vào một tệp. Dữ liệu là các khối 8 byte được chia thành hai phần 4 byte, thời gian và tải trọng.Có phải WriteFile nguyên tử không?

Theo MSDN, hàm WriteFile là nguyên tử (http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx), nếu dữ liệu được viết có kích thước nhỏ hơn một khu vực.

Vì tệp sẽ chỉ chứa các khối này (không có "cấu trúc" của tệp nên không thể tạo lại tệp bị hỏng), thêm một cái sau mỗi khác, điều quan trọng là toàn bộ khối hoặc không có gì được viết vào tập tin mọi lúc. Vì vậy, câu hỏi đặt ra là, tôi đã hiểu nó một cách chính xác rằng một file ghi nhỏ hơn một sector có kích thước được viết hoàn toàn vào đĩa hoặc không được viết hoàn toàn, không có vấn đề gì xảy ra trong cuộc gọi thực tế tới writefile?

Trả lời

6

WriteFile là nguyên tử miễn là ghi không vượt qua ranh giới khu vực trong tệp. Vì vậy, nếu kích thước sector là 512 byte, việc viết 20 byte bắt đầu từ tệp offset 0 sẽ là nguyên tử, nhưng dữ liệu tương tự được ghi ở tệp offset 500 sẽ không phải là nguyên tử. Trong trường hợp của bạn, bản ghi phải là nguyên tử, vì kích thước sector phải là bội số của 8.

This MSDN blog có thêm thông tin về cách viết ghi nhiều sector nguyên tử mà không sử dụng giao dịch NTFS.

+0

Có phải nguyên tử miễn là máy ở trạng thái thông minh? (tức là nếu quá trình có thể bị lỗi, nhưng hạt nhân được giữ ở trạng thái tốt, thì nó có phải là nguyên tử không?) – Mehrdad

Các vấn đề liên quan