在运行时,ISO C和POSIX都没有提供确定底层操作系统的功能。从理论上讲,这并不重要,因为C语言提供了最常见系统调用的封装。但是,在许多实际场景中,了解主机环境比C语言愿意分享的更多会更有帮助,例如,为了找到存储配置文件的位置或如何调用select()
。
那么,在C语言编写的应用程序中,有没有惯用的方式来确定运行时的底层操作系统呢?
至少,我能否轻松地区分Linux、Windows、BSD和MacOS?
我的当前猜测是检查某些文件/目录(例如C:\
或/
)的存在性,但这种方法似乎不可靠。也许查询一系列此类来源可以帮助建立“操作系统指纹”的概念,从而增加可靠性。无论如何,期待您的建议。
#ifdef
在这里是必不可少的,即使你不能喜欢它,也必须学会与之共处。 - David Heffernan