我正在使用一个使用qdbm来维护键值存储的程序(qdbm 链接到程序中)。在某些情况下,该进程将一个值放入 qdbm 数据库,然后通过调用外部初始化脚本(通过 system())重新启动自身。似乎有时写入 qdbm 数据库的值实际上并没有保持不变,我想知道这是否可能是由于在通过 SIGTERM 终止进程之前数据没有刷新到磁盘。
由于 qdbm 使用 write() 系统调用(相对于 fwrite() 库函数)进行写入,我认为 Linux 内核应该知道最终将所有内容刷新到磁盘(系统不会重新启动,只是进程)。此外,在进程被杀死之前,在 FD 上确实会调用 close()。
那么,我的理解是否正确,或者我是否需要在某处添加一些 fdatasync() 或类似的调用?此处还可以链接到有关语义的权威参考资料。