c - 如何同步文件移动到存储?

标签 c linux file-io storage

我在 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);

那还能行吗?

最佳答案

可能您正在寻找 void sync(void); 函数。

sync 函数只是将所有修改的 block 缓冲区排队等待写入并返回,它不会等待磁盘写入发生。

sync 函数通常被定期调用(通常每 30 秒一次) 系统守护进程,通常称为更新。

保证定期刷新内核的 block 缓冲区。

关于c - 如何同步文件移动到存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26014185/

相关文章:

c - C 函数 recvfrom 和 sendto 是否互斥?

c - 在 C (Windows) 中检测 USB 驱动器插入

c - stat st_mode 始终等于 16877

将十六进制数组 (char*) 转换为整数

python - 从命令行、Linux 执行带有函数的 python 脚本

multithreading - 在不同平台上使用 sqlite 和文件锁定是否存在已知问题?

linux - 删除/usr 目录后访问 BeagleBone (Debian) 上的/root 文件夹

linux - 如果我使用 Putty 登录,Teamcity SSH Exec 无法执行我可以执行的命令

php readfile ('folder/subfolder' .$_GET ['userInput' ]) 安全问题?

macos - 在 OS X 上使用 sed 进行就地编辑