C/C++中操作系统的自动检测

Autodetection of OS in C/C++

本文关键字:自动检测 操作系统 C++      更新时间:2023-10-16

是否有任何方法可以使用C/C++代码自动检测操作系统?我需要这个来运行一些Linux、Windows甚至Raspberry Pi的跨平台代码。我正在尝试自动检测操作系统,这样我就不会陷入必须询问机器上运行的操作系统作为输入的境地。

我在想一个类似于验证文件系统结构之类的黑客攻击,我不知道我是否在做什么。

我过去曾使用以下代码在linux和windows 之间进行检查

#include<stdio.h>
int main(int argc, char *argv[])
{
#ifdef _WIN32
   printf("in Windows");
#endif
#ifdef linux
    printf("In Linux");
#endif
    return 0;
}

通常所有的工具链都有自己预定义的宏,所以你需要使用这些宏来检测哪个操作系统是这样的。

此类预定义宏的列表。

http://sourceforge.net/p/predef/wiki/OperatingSystems/


是的,附带说明一下,这里的操作系统检测是使用编译时宏进行的。因此,根据工具链,各个宏的定义将进入构建阶段。

要在运行时中检测操作系统版本,就像在java中一样,我们执行

System.getProperty("os.name")

在C/C++中也一样,我们没有任何API。


在使用"uname"的POSIX系统中,我们可以获得操作系统名称。

有一个方便的列表(保存到磁盘!)。预定义编译器宏的列表。

我还建议,如果您针对多个平台,请寻找一个已经为它们提供的库。