LINUX.ORG.RU

Узнать ОС в C

 


0

1

у меня такая задача есть переменная bool oc и надо написать функицю котороя возвращала бы oc=true если windows и oc=false если linux. Кто знает как плиз помогите;

Ответ на: комментарий от tailgunner

Это не сработает в некоторых дистрибутивах без библиотек совместимости с говно86 (например, в Debian).

anonymous
()
#include <stdio.h>
#include <stdbool.h>

int main(int argc, char *argv[]) {
    char *h = "\x4d\x5a";
    FILE *f = fopen(argv[0], "r");
    bool w = getc(f) == h[0] ? getc(f) == h[1] : 0;
    
    if (w)
        puts("You're on Windows");
    else
        puts("You're not on Windows");
    
    return !w;
}
anonymous
()
#include <stdio.h>

int main(int arc, char *arv[])
{
  char osname[100];
  printf("enter os type:");
  scanf("%s", osname);
  if (!strcmp(osname, "linux")) {
    puts("you are using linux!");
  } else if (!strcmp(osname, "windows")) {
    puts("you are using windows!");
  } else {
    printf("you are using %s\n", osname);
  }
  return 0;
}
anonymous
()

Т.к. в общем случае непортабельно, решается кашкой из директив препроцессора в теле функции, для сборки под «таргет платформ» — т.к. собирая бинарь, ты всегда знаешь «под что» :)

slackwarrior ★★★★★
()

А если не Windows и не Linux? (представляешь, бывает еще BSD, Solaris и масса других страшных вещей)

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
puts(sizeof(wchar_t) == 2 ? "Maybe windows" : "Not windows");
vvviperrr ★★★★★
()
Ответ на: комментарий от anonymous

Слишком не оптимально.

#include <stdio.h>

int main(int arc, char *arv[])
{
  char osname[100];
  printf("enter os type:");
  scanf("%s", osname);
  printf("you are using %s\n", osname);
  return 0;
}
RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Ответ на: комментарий от batekman

Эта «хрень» — основная часть линукса. Ты ещё спроси, какое отношение имеет к линуксу ядро Linux и GNU coreutils.

Очень, очень толсто.

Waterlaz ★★★★★
()
Ответ на: комментарий от vromanov

Основная часть какого линукса?

Любого распространённого, в котором не принято компилировать всё подряд и заучивать зависимости.

Ты еще скажи, что нотепад основная часть винды.

Не основная, но детектить венду по наличию файла, расположенного по адресу «%windir%\notepad.exe», вполне вариант.

batekman ★★★
()
Ответ на: комментарий от batekman

в котором не принято компилировать всё подряд

Спасибо, я лучше покомпилирую.

ugoday ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.