Có cách nào để xác định xem tệp mở đã được sửa đổi trong POSIX hay không? Cụ thể hơn, làm cách nào tôi có thể triển khai is_modified()
bên dưới?Xác định xem tệp mở đã được sửa đổi trong C
FILE *f = fopen("myfile", "r+");
// do various things with f
if (is_modified(f))
foo(f);
Để cung cấp một số ngữ cảnh, tôi viết mô-đun trong C cho mọi tệp cần lưu trữ giá trị băm trong bảng. Giao diện cung cấp các trình bao bọc cho fopen()
và fclose()
và việc băm có thể được thực hiện khi tệp được đóng. Tôi tìm thấy một số phương pháp để làm điều này, nhưng không phải là như hiệu quả, sạch sẽ hoặc không có lỗi bằng chứng là tôi rất thích:
- Tính các hash của mỗi tập tin mở ra cho văn bản.
fflush(f)
và kiểm tra xem dấu thời gian đã thay đổi chưa.- Cung cấp hàm bao quanh
fwrite()
,fprintf()
vv
Bất kỳ lời đề nghị?
Nếu bạn là một trong những điều đó mở tập tin, tại sao không đơn giản theo dõi xem bạn có viết hay không? –
Để trừu tượng hóa. Điều này được cho là một mô-đun cho ra các trình xử lý tệp trong đó khách hàng có thể hoạt động theo bất kỳ cách nào họ muốn. Tôi không muốn sửa đổi các phần lớn của mã khác hoạt động trên các tệp mở bằng các hàm thư viện chuẩn. – nccc
Nếu bạn muốn tránh các quá trình khác đồng thời sửa đổi tệp của mình, hãy xem [khóa tệp] (http://en.wikipedia.org/wiki/File_locking). – jweyrich