Ни ISO C, ни POSIX не предлагают функциональных возможностей для определения базовой ОС во время выполнения. С теоретической точки зрения это не имеет значения, поскольку C предлагает оболочки для наиболее распространенных системных вызовов, а с точки зрения придирчивости, даже не обязательно базовая ОС. .
Однако во многих реальных сценариях оказалось полезным знать о среде хоста больше, чем С готов поделиться, например чтобы узнать, где хранить файлы конфигурации или как вызвать select ()
, поэтому:
Существует ли идиоматический способ для приложения, написанного на C, определять базовую ОС во время выполнения?
По крайней мере, могу ли я легко выбрать между Linux, Windows, BSD и MacOS?
Сейчас я предполагаю проверить наличие определенных файлов / каталогов, таких как C: \
или /
, но такой подход кажется ненадежным. Возможно, запрос к серии таких источников может помочь установить понятие «отпечатков пальцев ОС», тем самым увеличивая надежность. В любом случае, я с нетерпением жду ваших предложений.