【发布时间】:2012-01-03 01:21:03
【问题描述】:
ISO C 和 POSIX 都不提供在运行时确定底层操作系统的功能。从理论的角度来看,这并不重要,因为 C 为最常见的系统调用提供了包装器,而且从挑剔的角度来看,甚至不必成为底层操作系统。
然而,在许多现实世界的场景中,事实证明,了解比 C 愿意分享的主机环境更多的信息是有帮助的,例如为了找出存储配置文件的位置或如何调用select(),所以:
对于用 C 编写的应用程序,是否有一种惯用的方法可以在运行时确定底层操作系统?
至少,我可以轻松地在 Linux、Windows、BSD 和 MacOS 之间做出选择吗?
我目前的猜测是检查某些文件/目录是否存在,例如C:\ 或/,但这种方法似乎不可靠。也许查询一系列此类来源可能有助于建立“操作系统指纹”的概念,从而提高可靠性。无论如何,我期待您的建议。
【问题讨论】:
-
呃,这个信息你在编译的时候就知道了
-
尝试运行程序一段时间。如果它在崩溃中被杀死,那么你就在 Windows 上。如果操作系统更新为 5G 或猫,那么您使用的是 Mac。如果你在 180 天后被黑客入侵,那就是 Linux。否则就是 BSD。
-
@Philip 嗯,
#ifdef在这里是必不可少的,即使你不能让自己喜欢它也必须学会与它相处 -
@rsaxvc,但就您的应用而言,wine+linux is windows,在 solaris is linux 上运行 linux 二进制文件,并且正在运行它们在 BSD 上仍然是 linux。
-
@rsaxvc 然后由模拟器来做好模拟系统的工作。当你在 Wine 上运行时,从程序的角度来看,操作系统就是 Windows。