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


900

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

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



краткий справочник по определению - whatis.techtarget.com/definition/…
parasrish

Ответы:


623

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


34
Нет, стандарт на уровне 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 .
Алекс Мартелли

23
Ваш комментарий ошибочен, так как доля Microsoft на настольных компьютерах, по крайней мере, делает его «тем, что следует миру».
Джед Смит

29
Я думаю, что имелось ввиду, что Microsoft не прилагает особых усилий для обеспечения взаимодействия с другими платформами.
Мипади

12
@deltaray обнимать, расширять и тушить . MS java (нестандартный java.util. Java.security, java.io, java.lang и java.awt), Internet Explorer (почти сказал «exploder») и .NET (да, я знаю, что они выпустили частично исходный код для .NET, но его лицензия ограничительна, и это еще не порт Linux. Mono не завершен). Также exFAT патенты . Вы абсолютно правы.
Wyatt8740

25
Microsoft's market share on desktops, at least, makes it "what the world follows"- Интересно отметить, насколько многое изменилось с момента этого комментария 2009 года :)
GMA

516

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

  1. C API

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

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

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

    Многие системные вызовы Linux существуют для реализации конкретной POSIX C функции API и сделать 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"

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

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

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

    PATH указана семантика поиска , включая то, как косые черты препятствуют PATHпоиску .

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

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

    POSIX добавляет:

    • 126: команда найдена, но не исполняемая.

    • 127: команда не найдена.

    • > 128: прекращается сигналом.

      Но POSIX, похоже, не определяет 128 + SIGNAL_IDправило, используемое Bash: /unix/99112/default-exit-code-when-process-is-terminated

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

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

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

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

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

  7. Структура каталогов

    Например: /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для отображения каталога с именем-l

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

  10. «POSIX ACL» (списки контроля доступа), например, используемые в качестве бэкэнда для setfacl.

    Это было отменено, но было реализовано в нескольких ОС, в том числе в Linux сsetxattr .

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

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

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

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

Windows

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

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

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

В 2016 году был объявлен новый официальный Linux-подобный API под названием «Windows Subsystem for 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?

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

Standard Base Linux расширяет POSIX.

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

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


18
Фантастические примеры, если бы у вас было такое же определение, как и принятый ответ, это был бы лучший ответ.
Марк

8
@ Марк спасибо! Я стараюсь не повторять того, что говорится в других ответах, поскольку люди, вероятно, уже прочитали их, и чтобы избежать дублирования ;-) Это известная дилемма: meta.stackoverflow.com/questions/305645/…
Сиро Сантилли 郝海东 冠状 病 六四法轮功 法轮功

1
Хорошая идея на самом деле объяснить, что покрывает POSIX (а что нет).
Слёске

4
Повсюду в литературе всплывают ссылки на «соответствие POSIX», и типичное определение POSIX, которое люди находят, - это «набор стандартов для взаимодействия между Unix-подобными операционными системами». Хотя это определение полезно, оно оставляет много сомнений, особенно в отношении функций, которые, как ожидается, будут взаимодействовать. Конечно, вы можете прочитать всю спецификацию POSIX, чтобы углубиться в детали (и потратить на это много времени). Но этот ответ дает столь необходимое резюме, чтобы получить общее представление о сфере применения POSIX. Отдельное спасибо Ciro за то, что нашли время написать это!
ARX

Также может быть полезно добавить некоторые гарантии Posix для целочисленных типов. Я не знаю точно, что и что не указано, но я знаю, что как минимум Posix требует существования uint8_t, uint16_t, uint32_t и соответствующих подписанных типов. Я не уверен, гарантирует ли это, что типы типа «int» имеют размер степени двойки и что система не будет делать что-то неприятное, например, «int» с 32 битами значения, 1 знаковым битом и 31 битом заполнения [таким образом, увеличение uint32_t может привести к UB]; если у вас есть стандартный под рукой, было бы неплохо сказать, что в этом отношении гарантировано, а что нет.
суперкат

74

POSIX это:

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

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


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

1
По сути, это «был» комплекс мер по облегчению боли развития. БЫЛО??
когти

5
Я поставил под сомнение использование слова было тоже, но это спорно. Чтобы ответить на ваши вопросы: (1) нет, POSIX имеет огромное значение для ядра, он просто описывает, как оно должно работать; (2) OS X является BSD и вполне соответствует POSIX, но есть серые области. Windows 2008 наиболее близка к жалобе POSIX; в мире Microsoft нет эквивалента POSIX.
Джед Смит

1
@ Клос: Не хочу пачкать область под ответом Клетуса ... но. Я связал POSIX.1-2008 в своем ответе ... прямо там.
Джед Смит

3
@ Джед Смит, нет никаких серых областей с точки зрения соответствия Mac OS X; Mac OS X сертифицирована на соответствие спецификации Single UNIX v3, стандартом которой является подмножество POSIX.
Майкл Аарон Сафян

43

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

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

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

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

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

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


1
Тогда почему Linux реализует большую часть POSIX, включая многие из расширений?
ниндзя

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

3
Весьма гениально с вашей стороны утверждать, что POSIX был написан постфактум! Это является отличительной чертой хорошей организации по разработке стандартов (SDO), где консенсус не достигается до тех пор, пока не существует хотя бы одна совместимая реализация.
fpmurphy

4
@fpmurphy: Создание спецификации ex post facto на основе одной или двух совместимых реализаций является нормой для стандартов сетевых протоколов IETF ..., которые взаимодействуют по преднамеренно слабым связям. Это не был успешный процесс стандартизации ОС. API между программами и системой (ядро или микроядро и его подсистемные серверы) гораздо более тесно связаны, чем клиенты и серверы или одноранговые узлы в сетях. (Я не говорю, что это невозможно; просто указываю на то, что есть различия, и история не показала, что последний является многообещающим).
Джим Деннис

2
Усилия IEEE по спецификации POSIX еще в 1985 году были поддержаны правительством США. Проведите исследование, прочитайте книгу по истории или что-то в этом роде.
rustyx

29

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


15
Он не просто «должен» облегчать написание кроссплатформенного кода, он облегчает написание кроссплатформенного кода. Единственное исключение - Windows, потому что Microsoft считает, что она как-то лучше всех остальных и не нуждается в соблюдении. Тем не менее, я предсказываю, что это сработает против них, тем более что Mac и Linux получают большую долю рынка. Если они действительно для «разработчиков, разработчиков, разработчиков», они поймут, что разработчики хотят соответствия UNIX.
Майкл Аарон Сафян

Исходя из того, что я слышал от людей, которые работают с ним гораздо теснее, чем когда-либо, это могло бы упростить ситуацию, но этого, безусловно, было недостаточно для большинства показов POSIX с однократной записью и выполнением при любом POSIX. люди получают, когда слышат, что это «стандарт» для операционных систем.
Хэнк Гей

6
Они не думают, что они «лучше всех»; они знают, что они больше, чем все остальные. Это также, почему они изменят свою мелодию, поскольку они теряют долю рынка. Это не уникально для них, например, Netscape начал больше заботиться о веб-стандартах, когда они перестали быть самыми популярными.
Кен

Написание приложения для использования только POSIX API значительно упрощает портирование между различными Unix и Unix-подобными операционными системами. Однако это самый низкий стандарт общего знаменателя, поэтому утилиты или приложения, которые зависят от операционной системы или оборудования, обычно требуют некоторой переписывания.
fpmurphy

2
@ Кен, и именно поэтому мы не должны позволить хрому Google стать слишком удобным.
Wyatt8740

29

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

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

Тем не менее, различные области Unix, как правило, в центре внимания, а не стандартные.

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

Открытая группа базовых спецификаций, выпуск 7

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


2
Я думаю, что вы используете термин «UNIX» неправильно. UNIX теперь относится к Единой Спецификации UNIX, и любая операционная система UNIX является операционной системой, которая соответствует Единой Спецификации UNIX. Возможно, вы имеете в виду UNIX-подобный?
Майкл Аарон Сафян

8
@ Майкл: Учитывая ваши комментарии в других ответах, вы, очевидно, очень поляризованный человек с мнениями, которые не совсем конструктивны. Этот конкретный комментарий очень педантичен, и мое значение было передано независимо от выбора ярлыка, с которым вы можете не согласиться. Кроме того, Windows является POSIX-совместимой в старших версиях. Вдохни и сделай шаг назад, пожалуйста.
Джед Смит

1
@ Джед Смит, если не считать сильных мнений, смысл поста в том, что некоторые операционные системы, которые сертифицированы для UNIX-совместимости, не ... так что, я думаю, будет справедливо сказать, что это вводит в заблуждение. Кроме того, что касается Windows, поскольку существуют выпуски, которые не соответствуют требованиям, разработчики не могут полагаться на POSIX при нацеливании на платформу Windows, что сводит на нет всю цель наличия POSIX.
Майкл Аарон Сафян

Unix это операционная система. UNIX - это бренд, принадлежащий The Open Group. Системы, сертифицированные по профилям брендинга UNIX95, UNIX98 или UNIX03, из которых соответствие конкретной версии спецификации Single UNIX составляет большинство требований к брендингу, могут использовать термин UNIX.
fpmurphy

6

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

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


4

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

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

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

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


3

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

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


3

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


0

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

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

Наиболее популярными примерами являются GNU Bash100% -ное соответствие и gawkполезность POSIX .


0

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

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


Стандарты файловой системы обрабатываются вне POSIX.
Джед Смит

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

0

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

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


-1

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

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

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

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

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

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

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


Синхронное API ядра не обязательно должно означать однопоточные процессы и сериализованный ввод-вывод. Это также не имеет ничего общего с машинами SMP. Это совершенно не связано. (Хотя я согласен, что API ядра синхронизации неоптимален, но не так сильно, как кажется в вашем посте.)
peterh - Восстановите Monica
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.