Что означает «POSIX»?

786

Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.

Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?

Теги:
posix
terminology

14 ответов

492
Лучший ответ

POSIX - это семейство стандартов, указанных IEEE, чтобы прояснить и унифицировать интерфейсы прикладного программирования (и вспомогательные проблемы, такие как утилиты командной строки командной строки), предоставляемые операционными системами Unix-y. Когда вы пишете свои программы, чтобы полагаться на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства Unix-производных (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API, который не стандартизован как часть Posix, вам будет труднее, если и когда вы захотите перенести эту программу или библиотеку в другие Unix-y-системы (например, MacOSX) в будущем.

  • 1
    1. Вы имеете в виду, что POSIX говорит, что все * nix ОС (ядра) должны иметь как минимум этот набор системных вызовов. право? 2. Windows / MAC следует POSIX? Если / Ifnot, то WINDOWS (95,98,2000, XP, Vista, 7) следует некоторому общему стандарту (может быть, их собственный проприетарный) стандарт? Другими словами, POSIX в мире Microsoft ==?
  • 29
    Нет, стандарт находится на уровне API - каждый указанный вызов может быть реализован в ядре или в библиотеке C с точки зрения другого вызова, и это прекрасно для Posix (и для ваших программ тоже ;-). MacOSX совместим с Posix, см. Devworld.apple.com/leopard/overview/osfoundations.html . Для Windows см en.wikipedia.org/wiki/POSIX#POSIX_for_Windows : соответствие Posix в настоящее время включено в Enterprise и Ultimate , изданиях только - хотя вы можете получить partways ж / Cygwin, (не в более дешевых!) En.wikipedia. org / wiki / Cygwin .
Показать ещё 12 комментариев
420

Самые важные вещи, которые определяет POSIX 7

  1. C API

    Значительно расширяет ANSI C такими вещами, как:

    • дополнительные файловые операции: mkdir, dirname, symlink, symlink readlink, link (жесткие ссылки), poll(), stat, sync, nftw()
    • процесс и потоки: fork, execl, pipe, семафоры sem_*, разделяемая память (shm_*), kill, планирование параметров (nice, sched_*), sleep, mkfifo, setpgid()
    • сеть: socket()
    • управление памятью: mmap, mlock, mprotect, madvise, brk()
    • утилиты: регулярные выражения (reg*)

    Эти API также определяют основные концепции системы, от которых они зависят, например, для fork требуется концепция процесса.

    Существует множество системных вызовов Linux для реализации конкретной функции API POSIX C и обеспечения совместимости с Linux, например, sys_write, sys_read ,... Однако многие из этих системных вызовов также имеют специфичные для Linux расширения.

    Основная реализация Linux для настольных компьютеров: glibc, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.

  2. Утилиты CLI

    Например: cd, ls, echo ,...

    Многие утилиты являются прямыми оболочками для соответствующей функции C API, например, mkdir.

    Основная реализация Linux для настольных систем: GNU Coreutils для маленьких, отдельные проекты GNU для больших: sed, grep, awk ,... Некоторые утилиты CLI реализованы Bash как встроенные.

  3. Язык оболочки

    Например, a=b; echo "$a" a=b; echo "$a"

    Основная реализация рабочего стола Linux: GNU Bash.

  4. Переменные среды

    Например: HOME, PATH.

  5. Статус выхода из программы

    ANSI C сообщает 0 или EXIT_SUCCESS для успеха, EXIT_FAILURE для сбоя и оставляет определение остальной реализации определенным.

    POSIX добавляет:

  6. Регулярное выражение

    Существует два типа: BRE (базовый) и ERE (расширенный). Basic устарел и поддерживается только для того, чтобы не нарушать API.

    Они реализованы функциями API C и используются во всех утилитах CLI, например, grep принимает BRE по умолчанию и ERE с -E.

    Например: echo 'a.1' | grep -E 'a.[[:digit:]]' echo 'a.1' | grep -E 'a.[[:digit:]]'

    Основная реализация Linux: glibc реализует функции в regex.h, которые такие программы, как grep могут использовать в качестве бэкэнда.

  7. Справочник struture

    Например: /dev/null, /tmp

    Linux FHS значительно расширяет POSIX.

  8. Имена файлов

    • / является разделителем пути
    • NUL не может быть использован
    • . это cwd, .. родитель
    • переносимые имена файлов
      • используйте максимум 14 символов и 256 для полного пути
      • может содержать только: a-zA-Z0-9._-

    См. Также: что такое соответствие posix для файловой системы?

  9. Соглашения API утилиты командной строки

    Не обязательно, используется POSIX, но почти нигде, особенно в GNU. Но верно, это слишком ограничительно, например, только однобуквенные флаги (например, -a), нет длинных версий с двойным дефисом (например, --all).

    Несколько широко используемых соглашений:

    • - означает STDIN, где файл ожидается
    • -- завершает флаги, например, ls -- -l для ls -- -l каталога с именем -l

    Смотрите также: Существуют ли стандарты для ключей и аргументов командной строки Linux?

Кто соответствует POSIX?

Многие системы строго следуют POSIX, но немногие фактически сертифицированы Open Group, которая поддерживает стандарт. Известные сертифицированные включают в себя:

Большинство дистрибутивов Linux очень совместимы, но не сертифицированы, потому что они не хотят оплачивать проверку соответствия. Inspur K-UX и Huawei EulerOS являются двумя сертифицированными примерами.

Официальный список сертифицированных систем можно найти по адресу: https://www.opengroup.org/openbrand/register/, а также на вики-странице.

Windows

Windows внедрила POSIX в некоторых своих профессиональных дистрибутивах.

Поскольку это была необязательная функция, программисты не могли полагаться на нее для большинства приложений конечного пользователя.

Поддержка устарела в Windows 8:

В 2016 году был объявлен новый официальный Linux -l ike API под названием "Подсистема Windows для Linux". Он включает системные вызовы Linux, запуск ELF, части файловой системы /proc, Bash, GCC, (вероятно, TODO glibc?), apt-get и другие: https://channel9.msdn.com/Events/Build/2016/P488 так что я считаю, что это позволит Windows запускать большую часть, если не всю, POSIX. Тем не менее, он ориентирован на разработчиков/развертывание, а не на конечных пользователей. В частности, не было планов разрешить доступ к графическому интерфейсу Windows.

Исторический обзор официальной совместимости Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin - это хорошо известный сторонний проект GPL, который "обеспечивает существенную функциональность POSIX API" для Windows, но требует, чтобы вы "перестраивали свое приложение из исходного кода, если хотите, чтобы оно работало в Windows". MSYS2 - это связанный проект, который, кажется, добавляет больше функциональности поверх Cygwin.

Android

Android имеет собственную библиотеку C (Bionic), которая не полностью поддерживает POSIX, начиная с Android. O: Android POSIX-совместима?

Бонусный уровень

Стандартная база Linux расширяет POSIX.

Используйте некадровые индексы, они гораздо более читабельны и доступны для поиска: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Получите полную версию HTML-страниц для ознакомления: где находится список функций POSIX C API?

  • 12
    Фантастические примеры, если бы у вас было такое же определение, как и принятый ответ, это был бы лучший ответ.
  • 6
    @ Марк спасибо! Я стараюсь не повторять того, что говорится в других ответах, поскольку люди, вероятно, уже прочитали их, и чтобы избежать дублирования ;-) Это известная дилемма: meta.stackoverflow.com/questions/305645/…
Показать ещё 9 комментариев
68

POSIX:

POSIX (произносится/pɒzɒks/) или "Интерфейс портативной операционной системы [для Unix]" 1 - это имя семьи соответствующих стандартов, установленных IEEE для определения приложения программный интерфейс (API), с интерфейсами оболочки и утилиты для программного обеспечения, совместимого с вариантами операционной системы Unix, хотя стандарт может применяться к любому операционной системы.

В основном это был набор мер, чтобы облегчить боль развития и использования различных вкусов UNIX, имея (в основном) общий API и утилиты. Ограниченное соответствие POSIX также распространяется на различные версии Windows.

  • 0
    1. Вы имеете в виду, что POSIX говорит, что все * nix ОС (ядра) должны иметь как минимум этот набор системных вызовов. право? 2. Windows / MAC следует POSIX? Если / Ifnot, то WINDOWS (95,98,2000, XP, Vista, 7) следует некоторому общему стандарту (может быть, их собственный проприетарный) стандарт? Другими словами, POSIX в мире Microsoft ==?
  • 0
    По сути, это «был» комплекс мер по облегчению боли развития. БЫЛО??
Показать ещё 7 комментариев
42

Позвольте мне дать резкое "неофициальное" объяснение.

POSIX - это набор стандартов, который пытается отличить системы UNIX и UNIX от тех, которые несовместимы с ними. Он был создан правительством США для целей закупок. Идея заключалась в том, что федеральные закупки США нуждались в способе юридически определять требования к различным видам заявок и контрактам таким образом, чтобы их можно было использовать для исключения систем, в которых данная существующая база кода или персонал по программированию НЕ были бы портативными.

Так как POSIX был написан post facto... для описания слабо аналогичного набора конкурирующих систем... он НЕ был написан таким образом, чтобы его можно было реализовать.

Итак, например, Microsoft NT была написана с достаточным соответствием POSIX, чтобы претендовать на некоторые ставки... хотя подсистема POSIX была практически бесполезной с точки зрения практической мобильности и совместимости с системами UNIX.

В течение десятилетий были написаны различные стандарты для UNIX. Такие вещи, как SPEC1170 (заданы одиннадцать сотен семидесятых вызовов функций, которые должны быть реализованы совместимо) и различные инкарнации SUS (Single UNIX Specification).

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

  • 1
    Тогда почему Linux реализует большую часть POSIX, включая многие расширения?
  • 8
    @ninjalj: Linux был написан для реализации практического набора UNIX-подобных функций. Делать это в соответствии с POSIX имеет смысл. Тем не менее, я хотел сказать, что POSIX не был создан как спецификация для внедрения новых операционных систем ... он был создан для того, чтобы сотрудники государственных закупок США могли отличить тех, кто соответствует определенным категориям заявок, от тех, которые не будут , Основное внимание в Linux уделяется предоставлению полезных функций способом, который является разумно совместимым, надежным и производительным. POSIX не совсем случайность на этом пути.
Показать ещё 4 комментария
28

POSIX - это стандарт для операционных систем, который должен был облегчить работу с кросс-платформенным программным обеспечением. Это особенно важно в мире Unix.

  • 15
    Он не просто «должен» облегчать написание кроссплатформенного кода, он облегчает написание кроссплатформенного кода. Единственное исключение - Windows, потому что Microsoft считает, что она как-то лучше всех остальных и не нуждается в соблюдении. Тем не менее, я предсказываю, что это сработает против них, тем более, что Mac и Linux получают большую долю рынка. Если они действительно для «разработчиков, разработчиков, разработчиков», они поймут, что разработчики хотят соответствия UNIX.
  • 0
    Основываясь на том, что я слышал от людей, которые работают с ним гораздо теснее, чем когда-либо, это могло бы упростить ситуацию, но этого явно было недостаточно для большинства показов POSIX с однократной записью и выполнением при любом POSIX. люди получают, когда слышат, что это «стандарт» для операционных систем.
Показать ещё 3 комментария
27

POSIX - это набор стандартов, предложенных IEEE и Open Group, который описывает, как будет работать идеальный Unix. Программисты, пользователи и администраторы могут ознакомиться с документом POSIX и ожидать, что POSIX-жалоба Unix предоставит все упомянутые стандартные средства.

Так как каждый Unix делает все по-другому - у Solaris, Mac OS X, IRIX, BSD и Linux все свои особенности - POSIX особенно полезен для тех, кто работает в этой отрасли, поскольку он определяет стандартную среду для работы. Например, большинство функций в библиотеке C основаны на POSIX; поэтому программист может использовать один в своем приложении и ожидать, что он будет вести себя одинаково в большинстве Unices.

Однако расходящиеся области Unix обычно являются фокусом, а не стандартными.

Самое замечательное в POSIX - это то, что вы можете прочитать его сами:

Базовые спецификации Open Group Issue 7

Проблема 7 известна как POSIX.1-2008, и там есть новые вещи, однако Google-fu для POSIX.1, и это позволит вам увидеть всю историю, за которой стоит Unix.

  • 2
    Я думаю, что вы используете термин «UNIX» неправильно. UNIX теперь относится к Единой спецификации UNIX, а любая операционная система UNIX - это операционная система, которая соответствует Единой спецификации UNIX. Возможно, вы имеете в виду UNIX-подобный?
  • 8
    @ Майкл: Учитывая ваши комментарии в других ответах, вы, очевидно, очень поляризованный человек с мнениями, которые не совсем конструктивны. Этот конкретный комментарий очень педантичен, и мое значение было передано независимо от выбора ярлыка, с которым вы можете не согласиться. Кроме того, Windows является POSIX-совместимой в старших версиях. Вдохни и сделай шаг назад, пожалуйста.
Показать ещё 2 комментария
5

В 1985 году люди из компаний в компьютерной индустрии объединились для разработки POSIX (Portable Operating System Интерфейс для компьютерных сред), который основан в основном в определении интерфейса VIX системы UNIX (SVID) и других ранее усилия по стандартизации. Эти усилия были подкреплены США. правительство, которому нужна стандартная вычислительная среда для минимизации его расходы на обучение и закупки. Выпущенный в 1988 году, POSIX - это группа стандартов IEEE, которые определяют интерфейсы API, оболочки и служебных программ для операционной системы. Несмотря на то, что для UNIX-подобных систем стандарты могут применяться к любой совместимой операционной системе. Теперь, когда эти стандарты получили признание, разработчики программного обеспечения способны разрабатывать приложения, которые запускаются во всех соответствующих версиях UNIX, Linux и других операционных систем.

Из книги: Практическое руководство по Linux

2

Posix больше похож на ОС, это "стандарт ОС". Вы можете представить ее как воображаемую ОС, которой на самом деле не существует, но у нее есть документация. Эти документы являются "стандартом posix", определенным IEEE, который является крупной организацией стандартов США. Операционные системы, реализующие эту спецификацию, являются "Posix-совместимыми".

Государственное регулирование предпочитает решения Posix-совместимые в своих инвестициях, поэтому совместимость с Posix имеет значительные финансовые преимущества, особенно для крупных ИТ-компаний США.

Награда за то, что ОС полностью совместима с posix, это гарантия того, что она будет беспрепятственно компилировать и запускать все приложения, совместимые с Posix.

Linux является наиболее известным. OSX, Solaris, NetBSD и Windows NT также играют здесь. Free- и OpenBSD только "почти" совместимы с Posix. Послегарантийное соответствие WinNT является лишь псевдо-решением, чтобы избежать вышеуказанного государственного регулирования.

2

Этот стандарт обеспечивает общую основу для Unix-подобных операционных систем. Он указывает, как должна работать оболочка, чего ожидать от таких команд, как ls и grep, и ряда библиотек C, которые авторы C могут ожидать иметь.

Например, здесь подробно описаны каналы, которые используют пользователи командной строки для объединения вместе команд, что означает, что функция Cs popen (pipe open) является стандартом POSIX, а не стандартом ISO C.

0

Некоторые факты о POSIX, которые не так ярки.

POSIX также является интерфейсом системного вызова или API, и ему почти 30 лет.

Он был разработан для последовательного доступа к данным на локальном хранилище с использованием одного компьютера с одним процессором.

Безопасность не была главной проблемой в POSIX, так как в течение многих лет приводила к многочисленным атакам в условиях гонки и вынуждала программистов обходить эти ограничения.

Серьезные ошибки все еще обнаруживаются, ошибки, которые можно было бы предотвратить с помощью более безопасного дизайна POSIX API.

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

Этот синхронный API особенно плох для доступа к удаленным и облачным объектам, где важны большие задержки.

0

Спецификация (план) о том, как сделать ОС совместимой с поздней ОС UNIX (да благословит его Бог!). Вот почему macOS и GNU/Linux имеют очень похожие терминальные командные строки, графические интерфейсы, библиотеки и т.д. Потому что они оба были разработаны в соответствии с планом POSIX.

POSIX не говорит инженерам и программистам, как кодировать, но что кодировать.

0

Когда вы пишете свои программы, чтобы полагаться на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API, который не стандартизован как часть Posix, вам будет труднее, если и когда вы захотите перенести эту программу или библиотеку в другие Unix-y-системы (например, MacOSX) в будущем.

0

POSIX определяет набор стандартов для операционной системы или программы. Цель состоит в том, чтобы написать новое программное обеспечение, совместимое с UNIX-подобными системами.

Например, программа, запущенная на Linux, также может компилироваться и запускаться на других UNIX-подобных системах, таких как Solaris, HP-UX и AIX и т.д.

Наиболее популярными примерами являются GNU Bash, который является 100% -ной совместимостью POSIX и утилитой gawk.

0

Posix управляет взаимодействием, переносимостью и другими областями, такими как использование и механизм fork, разрешения и стандарты файловой системы, такие как /etc,/var,/usr и т.д.. Следовательно, когда разработчики пишут программу под совместимой с Posix системой, такой как, например, Linux, как правило, не всегда гарантируется запуск в другой совместимой с posix системе, такой как система IBM AIX или другие коммерческие варианты Unix. Posix - хорошая вещь, поскольку она облегчает разработку программного обеспечения для максимальной мобильности, к которой он стремится. Надеюсь, что этот ответ имеет смысл.

Благодаря Jed Smith и Tinkertim за то, что я указал на свою ошибку - мой плохой!!!: (

  • 0
    Стандарты файловой системы обрабатываются вне POSIX.
  • 0
    Вы путаете POSIX с такими вещами, как LSB (Linux Standard Base). Две (в основном) POSIX-совместимые операционные системы - это FBSD и Linux, но обе они имеют довольно разную организацию файловой системы и установки библиотек по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню