C++ fclose、fsync和硬件看门狗

C++ fclose、fsync和硬件看门狗,c++,watchdog,fclose,fsync,C++,Watchdog,Fclose,Fsync,我正在经历一个对我来说毫无意义的有趣问题。我正在写入一个文件,2秒钟后硬件看门狗被触发,计算机复位。但是,我没有看到我最后一次写入该文件。我在fsync和fclose之后放了一个print语句,这两个语句正在被打印出来,所以我知道调用它们时有很多空闲时间……但它似乎并没有实际写入文件。这是在C++中。我必须延迟6秒才能看到写入显示。你知道是什么导致了这种行为吗?第一件事-任何一种不是由fsyncI刷新的HD缓存/缓冲区,只要在linux手册页上读到:“调用fsync()并不一定确保包含文件的目录

我正在经历一个对我来说毫无意义的有趣问题。我正在写入一个文件,2秒钟后硬件看门狗被触发,计算机复位。但是,我没有看到我最后一次写入该文件。我在fsync和fclose之后放了一个print语句,这两个语句正在被打印出来,所以我知道调用它们时有很多空闲时间……但它似乎并没有实际写入文件。这是在C++中。我必须延迟6秒才能看到写入显示。你知道是什么导致了这种行为吗?

第一件事-任何一种不是由fsyncI刷新的HD缓存/缓冲区,只要在linux手册页上读到:“调用fsync()并不一定确保包含文件的目录中的条目也已到达磁盘。为此,需要显式的fsync()“不确定如何找到目录的fd,但这可能会解决它???@user2494298,这与Posix不符。”。但是,您可以尝试使用
O|u SYNC | O_DSYNC
打开。很难说,至少尝试在fsync之前添加fflush,如果它不起作用,请尝试使用opendir刷新directory@IlyaBursov使用
fflush
很好。每次我使用
fsync
,它都在一个用
open
打开的文件中,并用
write
写入,所以内部缓冲并不重要。