[英]how to (f)sync a directory under linux in c
我在 linux 下有一些 c 应用程序。 我正在使用rename(...)
重命名一些文件 如何确保重命名持久写入底层磁盘?
使用文件,我可以执行以下操作:
FILE * f = fopen("foo","w");
...
fflush(f);
fsync(fileno(f));
fclose(f);
如何在 c 中的rename()
之后fsync
(或类似)目录?
这是你可以做你想做的事情:
#include <fcntl.h>
int fd = open('/path/to/dir', O_RDONLY);
fsync(fd);
当然,不要忘记在不再需要时关闭fd
文件描述符。
与一些误解相反, rename()
的原子性并不能保证文件会持久化到磁盘。 原子性保证仅确保文件系统缓冲区中的元数据处于一致状态,而不是已持久化到磁盘。
根据手册,在函数返回时, rename
已有效完成(返回 0)或发生错误(返回 -1)并errno
以检查错误。
如果您希望系统在rename
后仅在此文件上应用潜在的挂起修改,您可以执行以下操作:
int fd = open(new_name, O_RDONLY);
syncfs(fd);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.