Что означает "POSIX"?

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

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

13 ответов


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


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

  1. C API

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

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

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

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

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

  2. утилиты CLI

    Е. Г.: cd, ls, echo, ...

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

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

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

    Е. Г., a=b; echo "$a"

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

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

    Е. Г.: HOME, PATH.

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

    ANSI C говорит 0 или EXIT_SUCCESS успехов, EXIT_FAILURE для сбоя и оставляет реализацию rest определенной.

    POSIX добавляет:

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

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

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

    Е. Г.: echo 'a.1' | grep -E 'a.[[:digit:]]'

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

  7. каталог struture

    Е. Г.: /dev/null, /tmp

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

  8. имена

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

    Читайте также: что такое соответствие posix для файловая система?

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

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

    несколько широко используемых конвенций:

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

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

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

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

  • OS X (Apple) X означает оба 10 и UNIX. Была первой системой Apple POSIX, выпущенной около 2001 года. См. также: является ли OSX POSIX OS?
  • AIX (IBM)
  • НР-УБ (Л. С.)
  • Солярис (Оракул)

большинство дистрибутивов Linux очень совместимы, но не сертифицированы, потому что они не хотят платить проверку соответствия.

посмотреть вики-страницы.

Windows

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

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

поддержка была устаревшей в Windows 8:

в 2016 году был анонсирован новый официальный Linux-подобный 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 для этого " предоставляет существенный API POSIX функциональность "для Windows, но требует, чтобы вы"перестроили свое приложение из источника, если вы хотите, чтобы оно работало в Windows". MSYS2 - это связанный проект, который, похоже, добавляет больше функциональности поверх Cygwin.

Android

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

бонус

в Стандартная База Linux далее расширяет POSIX.

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

получить полную версию HTML-страниц на молнии для grepping:есть ли список API / функций POSIX?


POSIX - это:

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

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


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

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

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

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

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

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


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

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

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

самое замечательное в POSIX заключается в том, что вы можете прочитать его сами:

Проблема С Базовыми Спецификациями Open Group 7

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


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


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

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


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

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


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

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

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

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


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

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

наиболее популярными примерами являются GNU Bash что на 100% соответствует POSIX и gawk утилиты.


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

спасибо Jed Smith & Tinkertim за указание на мою ошибку-моя плохая!!! :(


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

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


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

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

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

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

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

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

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