如何找到操作系统的名称?

How do I find the name of an operating system?

本文关键字:操作系统 何找      更新时间:2023-10-16

问题很简单。我想要一个函数(c++)或方法,在调用时,返回类似

的东西
"Windows" //or
"Unix"
没什么特别的,我不需要版本号之类的。只是操作系统的名字。快速的谷歌搜索没有找到任何有用的东西,所以我想我应该把这篇文章贴在这里

因为你不可能有一个可以在所有操作系统上运行的二进制文件,你需要再次重新编译你的代码。可以使用宏。

使用宏,如

_WIN32
_WIN64
__unix
__unix__
__APPLE__
__MACH__
__linux__
__FreeBSD__
这样的

std::string getOsName()
{
    #ifdef _WIN32
    return "Windows 32-bit";
    #elif _WIN64
    return "Windows 64-bit";
    #elif __APPLE__ || __MACH__
    return "Mac OSX";
    #elif __linux__
    return "Linux";
    #elif __FreeBSD__
    return "FreeBSD";
    #elif __unix || __unix__
    return "Unix";
    #else
    return "Other";
    #endif
}                      

你应该阅读编译器的手册,看看他们提供了哪些宏来检测编译时的操作系统

From Poco源代码:

Win32:

std::string EnvironmentImpl::osNameImpl()
{
    OSVERSIONINFO vi;
    vi.dwOSVersionInfoSize = sizeof(vi);
    if (GetVersionEx(&vi) == 0) throw SystemException("Cannot get OS version information");
    switch (vi.dwPlatformId)
    {
    case VER_PLATFORM_WIN32s:
        return "Windows 3.x";
    case VER_PLATFORM_WIN32_WINDOWS:
        return vi.dwMinorVersion == 0 ? "Windows 95" : "Windows 98";
    case VER_PLATFORM_WIN32_NT:
        return "Windows NT";
    default:
        return "Unknown";
    }
}
Unix:

std::string EnvironmentImpl::osNameImpl()
{
    struct utsname uts;
    uname(&uts);
    return uts.sysname;
}