如何在运行时在C中检测OS

达芬奇(Leonardo da Vinci)

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

#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 ++解决方案并不是我想要的,但是在这个高水平上,我很满意^^“

达芬奇(Leonardo da Vinci)

终于回答了这个问题。

答案是:您不需要。我注意到了。定义已经可以正常工作了。如果您要为另一个平台编译C代码,则交叉编译器将负责重新定义定义,因此,如果您使用预处理程序指令,则系统将始终知道该系统是什么。

但是,如果出于某种原因您确实需要它,则必须做一些丑陋的事情。就像使用系统一样(“ uname -a> my_file”);然后读取my_file内容,如果该命令不起作用,则尝试另一命令。

主要是,您不需要它=)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在运行时检测Python版本?

如何在运行时检测$ GOHOSTOS和$ GOHOSTARCH?

如何在运行时在NodeJS中触发分析?

如何在运行时读取dockerfile中的值

如何在运行时在docker中接受参数?

如何在运行时在Swing中添加JLabel?

如何在运行时从C ++创建QQmlComponent?

C ++如何在运行时链接函数声明?

如何在运行时从C ++中的DLL文件创建对象?

如何在 Unity c# 中在运行时管理 AudioSources

如何在运行时查看我的程序在C中的内存布局?

在C中:如何在运行时使用偏移量指向不同的成员?

如何在运行时在Objective-C中查找字符串常量?

如何在运行时C#中清除表单控件

如何在运行时在Visual Studio中编辑C#代码,而不是编辑并继续

如何在运行时在 C# MVC 中在运行时向已经存在的数据表添加新行

Emscripten:如何在运行时检测 webgl 上下文版本?

如何在运行时检测类型是否可以为空?

如何在运行时检测是启用还是禁用了KASLR?

如何在运行时中检测到应用程序使用了Swift

如何在运行时以编程方式检测属性是否为IBOutlet?

如何在运行时检测新的一天已经过去?

在运行时在Objective-C中检测并使用可选的外部C库

如何在运行时运行php扩展

没有RTTI,在C ++中如何在运行时确定集合中的对象是否实现了接口

如何在C#中在运行时添加/执行并最终将新代码删除到程序中

在运行时检测 cuda/GPU

如何在运行时检查Mac OS X版本

如何在运行时在浏览器中运行代码