如何在运行时检测 C 中的操作系统

How to Detect the OS in C at running time

本文关键字:操作系统 检测 运行时      更新时间:2023-10-16

我知道这并不简单,我已经研究了一段时间,现在我几乎可以肯定没有完全安全的方法。但就是这样。我正在寻找一种方法来知道哪个是运行我的应用程序的操作系统。到目前为止,我得到了这个:

#if defined(__WIN64__) || defined(__WIN64) || defined(WIN64)
    #define NLF_OS_WINDOWS
    #define NLF_OS_64BITS
#elif defined(__WIN32__) || defined(__WIN32) || defined(WIN32)
    #define NLF_OS_WINDOWS
    #define NLF_OS_32BITS
#elif defined(unix) || defined(__unix__) || defined(__unix)
    #define NLF_OS_UNIX
    #if defined(__APPLE__)
        #define NLF_OS_APPLE
        #define NLF_OS_BITS_UNIDENTIFIED
        #include <TargetConditionals.h>
        #if TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR
            #define NLF_OS_SIMULATOR
        #elif TARGET_OS_IPHONE
            #define NLF_OS_IPHONE
        #else
            #define NLF_OS_OSX
        #endif
    #elif defined(__linux__) || defined(__linux) || defined(linux)
        #define NLF_OS_LINUX
        #if defined(i386) || defined(__i386) || defined(__i386__)
            #define NLF_OS_32BITS
        #elif defined(amd64)  || defined(__amd64) || defined(__amd64__)
            #define NLF_OS_64BITS
        #endif
    #elif defined(__FreeBSD__) || defined(__FreeBSD) || defined(FreeBSD)
        #define NLF_OS_FREEBSD
        #if defined(i386) || defined(__i386) || defined(__i386__)
            #define NLF_OS_32BITS
        #elif defined(amd64)  || defined(__amd64) || defined(__amd64__)
            #define NLF_OS_64BITS
        #endif
    #endif
#else
    #define NLF_OS_UNIDENTIFIED
    #define NLF_OS_BITS_UNIDENTIFIED
#endif

它已经有所帮助,但它只在我编译应用程序时告诉我系统是什么。但是,由于我想交叉编译我正在做的事情,如果我能为应用程序提供一种知道哪个是当前正在运行的系统的方法,那将非常有用。明白了吗?

也许我可能会使用 sys/"something"(如 sys/types.h 和 sys/stat.h)库来做一些丑陋的事情,但我几乎不知道这些事情。

PS.:一个C++的解决方案并不完全是我想要的,但在这么高的地方,我^^"

终于回答了这个问题。

答案是:你不需要。我注意到了这一点。定义已经工作得很好。如果您正在为另一个平台编译 C 代码,交叉编译器将负责重新定义 de defines,因此如果您使用预处理器指令,您的系统将始终知道系统是什么。

但是,如果出于某种原因,你真的需要它,你将不得不做丑陋的事情。比如使用一个系统("uname -a> my_file"),然后读取my_file内容,如果这个命令不起作用,请尝试另一个命令。

主要是,你不需要它=)