在运行时确定操作系统

ISO C和POSIX都不提供在运行时确定底层操作系统的function。 从理论的angular度来看,这并不重要,因为C为最常见的系统调用提供了包装,并且从挑选的angular度来看,甚至不必基础操作系统。

然而,在许多现实世界的场景中,已经certificate比C愿意分享更多关于主机环境的certificate是有帮助的,例如为了找出在哪里存储configuration文件或者如何调用select() ,所以:

用C编写的应用程序是否有一种习惯用法来确定运行时的底层操作系统?

至less,我可以在Linux,WindowsBSD和MacOS之间轻松做出决定吗?

我目前的猜测是检查某些文件/目录的存在,如C:\/ ,但这种方法似乎不可靠。 也许查询一系列这样的来源可能有助于build立“操作系统指纹”的概念,从而提高可靠性。 无论如何,我期待着你的build议。

Solutions Collecting From Web of "在运行时确定操作系统"

实际上,大多数系统都有一个uname命令,显示当前正在使用的内核。 在Mac OS上,这通常是“Darwin”,在Linux上只是简单的“Linux”,在Windows上是“ERROR”,FreeBSD将返回“FreeBSD”。

更完整的uname输出列表

我很确定有一个C等价于uname ,所以你不需要system()

如果你在POSIX系统上,你可以从<sys/utsname.h>调用uname()。

这显然不是100%可移植的,但我不认为会有任何方法可以在运行时授予。

有关详细信息,请参阅手册页

运行时不是确定这一点的时候,因为没有史诗般的一个平台的二进制文件不能运行在另一个平台上,你应该在平台敏感的代码周围使用#ifdef

 if (strchr(getenv("PATH"),'\\')) puts("You may be on windows..."); 

即使我同意“运行时间不是确定这个时间…”