如何在运行时检测 C 中的操作系统
How to Detect the OS in C at running time
我知道这并不简单,我已经研究了一段时间,现在我几乎可以肯定没有完全安全的方法。但就是这样。我正在寻找一种方法来知道哪个是运行我的应用程序的操作系统。到目前为止,我得到了这个:
#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内容,如果这个命令不起作用,请尝试另一个命令。
主要是,你不需要它=)
相关文章:
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 在C++中设置基于操作系统的文件路径
- 操作系统如何检测进程崩溃
- 检测到由于操作系统内存不足而导致子进程终止
- 如何在 c++ 运行时检测当前操作系统?
- 如何在运行时检测 C 中的操作系统
- 检测处理器在32位操作系统下是否为64位
- 是否可以在c++中检测操作系统
- 此代码如何用于检测 XP 操作系统
- C/C++中操作系统的自动检测
- 检测 POSIX 操作系统上的 SSD 存储设备