我检查了man 2 sync
它显示sync
和syncfs
void sync(void); void syncfs(int fd);
syncfs
很容易理解。 给出一个fd,并将该fd的数据完全写入底层文件系统。
什么是sync
?
sync() causes all buffered modifications to file metadata and data to be written to the underlying file systems.
是否系统中的所有缓冲区都写入了fs? 还是所有由这个进程打开的文件都写入了fs? 我不太明白"buffered modifications to file metadata"
无论何时发出write
, send
,写入文件支持的映射或类似的东西,内核都不会强制将数据直接转储到持久性存储,底层网络堆栈等等。这种缓冲是出于性能原因而完成的。
sync
指示内核做到这一点。 清空所有缓冲区。