在运行时确定OS

Phi*_*lip 7 c linux windows macos bsd

ISO C和POSIX都不提供在运行时确定底层操作系统的功能.从理论的角度来看,无关紧要,因为C为最常见的系统调用提供包装,从挑选的角度来看,甚至不必底层操作系统.

但是,在许多实际场景中,已经证明有必要了解有关主机环境的信息,而不是C愿意共享,例如为了找出存储配置文件的位置或如何调用select(),所以:

对于用C编写的应用程序来说,在运行时确定底层操作系统是否有惯用的方法?

至少,我可以轻松地在Linux,Windows,BSD和MacOS之间做出决定吗?

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

Tom*_*rdt 6

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

更完整的uname输出清单

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