Tôi đã phát triển một chương trình C (Linux), chương trình này tạo một tệp mới và ghi vào, sau đó khởi động lại PC.Chức năng khởi động lại Linux được gọi trong chương trình C gây mất tập tin được tạo bởi chương trình trên đĩa
Sau khi khởi động lại, tôi đã mất tệp do chương trình của tôi tạo. Khi tôi tắt chức năng khởi động lại, tập tin được tạo bởi chương trình của tôi vẫn còn hiện diện.
Hành vi này được xem với Linux: - openWRT (Backfire 10,03) trên VirtualBox (ext2) - Linux (Ubuntu) (hệ thống tập tin ext4)
Có bạn một sự giải thích cho hành vi này và làm thế nào tôi có thể sửa chữa nó?
#include <stdio.h>
#include <sys/reboot.h>
int main()
{
FILE *pFile;
char mybuffer[80];
pFile = fopen ("/home/user/Desktop/example.txt","w");
if (pFile == NULL) perror ("Error opening file");
else
{
fputs ("test",pFile);
fclose (pFile);
}
rename("/home/user/Desktop/example.txt","/home/user/Desktop/example123.txt");
reboot(RB_AUTOBOOT);
return 0;
}
Tự xả (đồng bộ) tệp: http: //linux.die.net/man/2/fsync ... – ChristopheD
Tôi không đồng ý, nhưng tôi ngạc nhiên khi gọi fclose() là không đủ . – larsks
@larsks Xem câu trả lời của tôi. Trang người đàn ông nêu rõ điều này. Hơi kỳ lạ của nó. – pmr