系统调用 sync() 的模糊引用

Ambiguous reference of system call sync()

我试图在我的 c++ 方法中调用 reboot() 之前写入缓存。编译时,我收到引用 'sync' 不明确的错误。我正在使用的是在 "include " 中定义的,我们的第三方包括引入另一个 sync() 函数的 cil 库。我如何获得 pint 到 unistd.h 版本?

在C++中,如果要引用C++中关于全局变量的全局sync(2) (see this,可以使用::sync();;你需要适当地 #include <unistd.h>

您不能在 C++ 中将语句放在全局范围内;语句应该只出现在函数定义中。

我还建议避免在一个 sync(); 之后调用 reboot(2),因为我认为 sync 可能无法完成。也许

 void restart_the_system(void) { // a C++ function
   ::sync();
   ::sleep (1);
   ::sync();
   ::sleep (1);
   ::sync();
   ::reboot (LINUX_REBOOT_CMD_POWER_OFF); 
 }

可能会稍微好一点。但是最近,你的 Linux 可能正在使用 systemd,你应该用它来重启。