我正在Linux环境下开发C代码。我使用fwrite
将一些数据写入某些文件。该计划将运行在经常发生停电的环境中(至少每天一次)。因此,我希望fwrite
可确保在写入数据时发生断电时不应更新文件。它应该只在fwrite
完成工作时保存该文件。我如何才能使用fwrite
只影响文件完成写入过程?在Linux上使用fwrite作为原子进程
编辑:我使用的fopen与wb
丢弃文件在以前的信息和如写一个新的文件
FILE *rtng_p;
rtng_p = fopen("/etc/routing_table", "wb");
fwrite(&user_list, sizeof(struct routing), 40, rtng_p);
,这是一个非常小的数据一些字节长
除非发生崩溃,'open/write/close/rename'是_logically_ atomic [因为'rename' is],这是OP [和大多数]是关注于。为了在崩溃时提供原子性,它应该是'open/write/fsync/close/rename/fsync',其中第二个'fsync'用于包含_directory_的文件描述符[否则,它不会立即更新]。否则,在崩溃后,您将更新文件数据,但该目录可能指向旧的inode [dirent的ondisk副本从未更新过]。顺便说一句,如果你在'fsync'之前'关闭',你没有'fsync'的fd –