我正在使用一个使用qdbm来维护键值存储的程序(将qdbm链接到程序中)。在某些情况下,进程会在qdbm数据库中添加一个值,然后通过调用外部init脚本(通过system())重新启动它自己。看来有时写入qdbm数据库的值实际上并没有粘住,我想知道是否可能是由于在通过SIGTERM终止进程之前数据没有被刷新到磁盘。由于qdbm使用write()系统调用(相对于fwrite()库函数)写入数据,所以我认为Linux内核应该知道最终将所有内容刷新到磁盘(系统不会重新启动,只是过程)。另外,在进程被终止之前,close()在FD上被调用。如果进程被终止,将通过write()写入的数据刷新到磁盘上吗?
所以,我的理解是正确的,或者我需要添加一些fdatasync()或类似的调用在那里的某个地方?此处的权威引用关于语义的链接也将被赞赏。
https://www.gnu.org/software/libc/manual/html_node/Termination-Internals.html#Termination-Internals是您想要的权威参考吗?引用:*请注意,流程终止时不会自动刷新流;请参阅Streams上的I/O * –