Ни ISO C, ни POSIX не предлагают функций для определения базовой ОС во время выполнения. С теоретической точки зрения это не имеет значения, так как C предлагает оболочки для наиболее распространенных системных вызовов, а с точки зрения придирки даже не обязательно существовать лежащий в основе ОПЕРАЦИОННЫЕ СИСТЕМЫ.
Однако во многих реальных сценариях полезно знать больше о хост-среде, чем C готов поделиться, например. для того, чтобы узнать, где хранить конфиги или как вызывать select()
, итак:
Есть ли идиоматический способ для приложения, написанного на C, определить базовую ОС во время выполнения?
По крайней мере, могу ли я легко выбирать между Linux, Windows, BSD и MacOS?
Мое текущее предположение состоит в том, чтобы проверить наличие определенных файлов/каталогов, таких как C:\
или /
, но этот подход кажется ненадежным. Возможно, запрос ряда таких источников может помочь установить понятие «отпечатки пальцев ОС», что повысит надежность. В любом случае, я с нетерпением жду ваших предложений.
select()
? - person Kerrek SB   schedule 03.01.2012#ifdef
. - person Philip   schedule 03.01.2012#ifdef
здесь важно, вы должны научиться ладить с этим, даже если вы не можете заставить себя полюбить это - person David Heffernan   schedule 03.01.2012wine
даже говорит вам по названию: Wine — это не эмулятор - person Philip   schedule 03.01.2012#ifdef
, но вы вполне можете использоватьif
. Любое понимание этого? - person Cody Gray   schedule 03.01.2012