【问题标题】:Cross-platform way to shutdown the computer跨平台关机方式
【发布时间】:2015-01-03 01:26:25
【问题描述】:

我想实现一个跨平台函数来关闭计算机,而不使用任何系统特定的 API,而是使用“stdlib.h”std::system 函数。我在网上几乎找不到任何可靠的资源。

在 Windows 系统上,以下工作:

#if defined(_WIN32) || defined(__WIN32) || defined(__WIN32__)
std::system("shutdown -s -t 0");
#endif

在其他操作系统(如 Linux、Mac OSX 等)上应该是什么命令?

【问题讨论】:

  • 没有平台无关的方式,如何关闭系统本质上是系统相关的。
  • 这更像是一个管理员而不是编程问题。您要问的问题是“我需要使用什么命令行来关闭 Linux/MacOSX/... 机器?”与编程的唯一关系是,您编写的程序将使用参数调用system,而不是在终端中键入它
  • Design nitpick,如果某些应用程序(除了长时间运行的应用程序,例如视频编码)会关闭计算机,我个人会有点恼火(委婉地说)。确保它真的合适且可选。
  • 是的,我完全同意。我希望将其作为长时间运行操作后关闭计算机的选项。

标签: c++ operating-system


【解决方案1】:

没有跨平台关机命令。

您需要查看您想要的操作系统中的关机命令,然后检查客户端正在运行的操作系统,并根据该操作系统选择正确的命令或代码来关闭特定系统。

【讨论】:

    【解决方案2】:

    在您的 *nix 系统上,以下应该可以工作。

    #include <cstdlib>
    
    int main() 
    {
      system("shutdown -P now");
      return 0;
    }
    

    但是,上面的代码假设您以 root 身份登录,如果您不是,则在没有以 root 身份登录时会出现错误。

    除了使用 switch 语句或 if - else 语句系列来确保指定操作系统的正确语法之外,没有“跨平台”方式来执行此操作。

    【讨论】:

    • 是的,它应该可以在 OSX 上运行,我确实在 leopard 上对其进行了测试。 OSX 的核心只是达尔文,但他们不想承认这一点。 developer.apple.com/library/mac/documentation/Darwin/Conceptual/… 会给你更多的文档。简短的回答它应该适用于较新的实现,即 Mavericks、Yosemite 等。此外,您应该知道很多人正在使用苹果脚本执行此操作。但最直接的方式是 C++,使用条件块来评估操作系统的类型。
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多