我正在使用stdio.h中提供的rename()函数移动文件的Linux环境中使用C/C++系统。如何将文件同步到存储?
移动后,我需要功能将其同步到底层存储以使更改永久。如果我有一个文件描述符,我可以使用fsync()或fdatasync()。
有没有一个这样做的优雅方式?或者我必须做这样的事情:
rename(old_path, new_path);
int fd = open(new_path, O_APPEND | O_WRONLY);
fdatasync(fd);
close(fd);
即使工作?
是的,它可以工作,尽管rename()不会对文件中的数据做任何事情,只会处理元数据。为了保持元数据的一致性,你还需要fsync()rename()影响的目录。 http://stackoverflow.com/questions/3764822/how-to-durably-rename-a-file-in-posix – nos 2014-09-24 10:54:05