我在Linux环境中使用C / C ++系统,我使用stdio.h中提供的rename()函数移动文件。
移动后,我需要将其同步到底层存储的功能,以使更改成为永久性的。如果我有文件描述符,我可以使用fsync()或fdatasync()。
有一种优雅的方式吗?或者我必须做这样的事情:
rename(old_path, new_path);
int fd = open(new_path, O_APPEND | O_WRONLY);
fdatasync(fd);
close(fd);
这甚至会起作用吗?
答案 0 :(得分:1)
可能您正在寻找void sync(void);
功能。
sync
函数只是将所有修改的块缓冲区排队以进行写入和返回,它不会等待磁盘写入发生。
函数sync
通常定期从(通常每30秒)调用一次
系统守护程序,通常称为更新。
保证定期清理内核的块缓冲区。