Linux works on which platform

Identify the platform linux or windows using C/C++ code [duplicate]

I was asked in an interview to how would you identify the platform only by providing runnable C code? The code must be runnable in both platform(i.e no special header files function used to check)?

those questions talk about macros, but I think the OP is really asking if how you’d do it with code which you could compile on multiple platforms. I’d suggest probing the file system for the presence of files which revealed the operating system.

Conceptually, it would probably make more sense to solve this on the build-environment level instead of the language level. I.e. have the build environment define a preprocessor flag that allows the code to determine the platform. Otherwise you introduce knowledge about the compiler into the source, which restricts portability and is not so nice in general.

I guess the question is not about compiler directives because they are not runnable c code right ? it is more like what code do I use to detect the platform. Weird because you have to compile C code for the specific platform anyway. Guess the question is a bit ambiguous for me.

How does this get marked as a duplicate. It’s a completely different question. (It may be a nonsense question, or a question which doesn’t have an answer, but it’s certainly not the same question as the one linked to as a duplicate.)

7 Answers 7

a quick google search shows this

#if defined(_WIN64) /* Microsoft Windows (64-bit). ------------------------------ */ #elif defined(_WIN32) /* Microsoft Windows (32-bit). ------------------------------ */ #endif 

OS identification macros are predefined by all C/C++ compilers to enable #if/#endif sets to wrap OS-specific code. This is often necessary in cross-platform code that must use low-level library functions for fast disk I/O, inter-process communications, or threads. While differences between Windows and other OSes are acute, even differences among UNIX-style OSes can require #if/#endif constructs. This article surveys common compilers and shows how to use predefined macros to detect common OSes at compile time.

The question is wierd. You can’t provide an executable which can run on multiple platforms. So the obvious answer is: compile it on one platform: if it runs, that’s the platform you’re on; if it doesn’t you’re on some other platform.

Читайте также:  Copying linux file system

Supposing that you do have separate executables, there’s really no real answer. For starters, what do you consider «a different platform»? Are Linux on a Sparc and Linux on a PC different platforms? What about two different versions of Linux? What about running under CygWin? Regardless of how you define it, though, you’ll probably need a separate test for each platform. But the question is silly, because, except for considering different versions different platforms, you’ll need a distinct executable for each platform, which means that you have to distinguish at compile time anyway

Just for the record: for starters, I’d use boost::filesystem, and try to read directories «c:\\» and «/usr» . In theory, you could have a directory named «c:\\» in the current directory under Unix, or a directory named «/usr» in C: under Windows, but the odds are definitely against it. Otherwise, try various files in «/proc/myPID» . The directory will almost certainly not exist under Windows, and even if it does, it won’t have the dynamic structure it has under various Unix. And the structure varies from one Unix to the next, so you should even be able to distinguish between Solaris and Linux.

If the comparison is just between Windows and Linux on a PC, of course, the simplest is to compile in 32 bit mode, and take the address of a local variable. If it’s greater than 0x8000000, you’re under Linux; if it’s less, Windows.

Источник

Операционные системы Linux

Linux — общее название UNIX-подобных операционных систем на основе одноимённого ядра и собранных для него библиотек и системных программ, разработанных в рамках проекта GNU.
GNU/Linux работает на PC-совместимых системах семейства Intel x86, а также на IA-64, AMD64, PowerPC, ARM и многих других.

К операционной системе GNU/Linux также часто относят программы, дополняющие эту операционную систему, и прикладные программы, делающие её полноценной многофункциональной операционной средой. В отличие от большинства других операционных систем, GNU/Linux не имеет единой «официальной» комплектации. Вместо этого GNU/Linux поставляется в большом количестве так называемых дистрибутивов, в которых программы GNU соединяются с ядром Linux и другими программами.

Читайте также:  Линукс минт мате апплеты

Разработка

В отличие от Microsoft Windows, Mac OS и коммерческих UNIX-подобных систем, GNU/Linux не имеет географического центра разработки. Нет и организации, которая владела бы этой системой; нет даже единого координационного центра. Программы для Linux — результат работы тысяч проектов. Некоторые из этих проектов централизованы, некоторые сосредоточены в фирмах. Многие проекты объединяют хакеров со всего света, которые знакомы только по переписке. Создать свой проект или присоединиться к уже существующему может любой и, в случае успеха, результаты работы станут известны миллионам пользователей. Пользователи принимают участие в тестировании свободных программ, общаются с разработчиками напрямую, что позволяет быстро находить и исправлять ошибки и реализовывать новые возможности.

Именно такая гибкая и динамичная система разработки, невозможная для проектов с закрытым кодом, определяет исключительную экономическую эффективность GNU/Linux. Низкая стоимость свободных разработок, отлаженные механизмы тестирования и распространения, привлечение людей из разных стран, обладающих разным видением проблем, защита кода лицензией GPL — всё это стало причиной успеха свободных программ.

Конечно, такая высокая эффективность разработки не могла не заинтересовать крупные фирмы, которые стали открывать свои проекты. Так появились Mozilla (Netscape, AOL ), OpenOffice.org (Sun), свободный клон Interbase (Borland) — Firebird, SAP DB (SAP). IBM способствовала переносу GNU/Linux на свои мейнфреймы.

С другой стороны, открытый код значительно снижает себестоимость разработки закрытых систем для GNU/Linux и позволяет снизить цену решения для пользователя. Вот почему GNU/Linux стала платформой, часто рекомендуемой для таких продуктов, как Oracle, DB2, Informix, SyBase, SAP R3, Domino.

Дистрибутивы GNU/Linux

Большинство пользователей для установки GNU/Linux используют дистрибутивы. Дистрибутив — это не просто набор программ, а ряд решений для разных задач пользователей, объединённых едиными системами установки, управления и обновления пакетов, настройки и поддержки.

Бесплатно распространяемая версия дистрибутива SuSE, принадлежащая компании Novell. Отличается удобством в настройке и обслуживании благодаря использованию утилиты YaST.

Международный дистрибутив, разрабатываемый обширным сообществом разработчиков в некоммерческих целях. Послужил основой для создания множества других дистрибутивов. Отличается строгим подходом к включению несвободного ПО.

Дистрибутив, собираемый из исходных кодов. Позволяет очень гибко настраивать конечную систему и оптимизировать производительность, поэтому часто называет себя мета-дистрибутивом. Ориентирован на экспертов и опытных пользователей.

Читайте также:  Linux system info terminal

Ориентированный на применение самых последних версий программ и постоянно обновляемый, поддерживающий одинаково как бинарную, так и установку из исходных кодов и построенный на философии простоты « KISS » («Keep it simple, stupid» / «Не усложняй»), этот дистрибутив ориентирован на компетентных пользователей, которые хотят иметь всю силу и модифицируемость Linux, но не в жертву времени обслуживания.

Помимо перечисленных, существует множество других дистрибутивов, как базирующихся на перечисленных, так и созданных с нуля и зачастую предназначенных для выполнения ограниченного количества задач.

Каждый из них имеет свою концепцию, свой набор пакетов, свои достоинства и недостатки. Ни один не может удовлетворить всех пользователей, а потому рядом с лидерами благополучно существуют другие фирмы и объединения программистов, предлагающие свои решения, свои дистрибутивы, свои услуги. Существует множество LiveCD, построенных на основе GNU/Linux, например, Knoppix. LiveCD позволяет запускать GNU/Linux непосредственно с компакт-диска, без установки на жёсткий диск. Большинство крупных дистрибутивов, включая Ubuntu, могут быть использованы как LiveCD.

Для желающих досконально разобраться с GNU/Linux подойдёт любой из дистрибутивов, однако довольно часто для этой цели используются так называемые «source-based» дистрибутивы, то есть предполагающие самостоятельную сборку всех компонентов из исходных кодов, такие как LFS, Gentoo или CRUX.

Применение

Область распространения Linux огромна, гораздо больше чем у вcех других операционных систем. Кроме того, что Linux прекрасно работает на обычных домашних и рабочих компьютерах и серверах, существуют адаптации Linux к большинству современных процессоров, что позволяет использовать системы с ядром Linux в сетевом оборудовании, домашней «умной» технике, роботах, мобильных телефонах, различных портативных устройствах и другом оборудовании, поддерживающем программируемые операции.

В конечном счёте столь широкий круг поддерживаемых устройств означает превосходную переносимость программ. Например, одно и то же приложение зачастую можно запустить с минимальными усилиями и на обычном компьютере, и на мобильном телефоне на базе Linux. Для примера: Windows и её младший брат Windows Mobile являются полностью несовместимыми платформами.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2018 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Источник

Оцените статью
Adblock
detector