Определение ОС во время выполнения

Ни ISO C, ни POSIX не предлагают функциональных возможностей для определения базовой ОС во время выполнения. С теоретической точки зрения это не имеет значения, поскольку C предлагает оболочки для наиболее распространенных системных вызовов, а с точки зрения придирчивости, даже не обязательно базовая ОС. .

Однако во многих реальных сценариях оказалось полезным знать о среде хоста больше, чем С готов поделиться, например чтобы узнать, где хранить файлы конфигурации или как вызвать select () , поэтому:

Существует ли идиоматический способ для приложения, написанного на C, определять базовую ОС во время выполнения?

По крайней мере, могу ли я легко выбрать между Linux, Windows, BSD и MacOS?

Сейчас я предполагаю проверить наличие определенных файлов / каталогов, таких как C: \ или / , но такой подход кажется ненадежным. Возможно, запрос к серии таких источников может помочь установить понятие «отпечатков пальцев ОС», тем самым увеличивая надежность. В любом случае, я с нетерпением жду ваших предложений.

7
задан Philip 3 January 2012 в 01:21
поделиться