Что означает "POSIX"?
Что такое POSIX? Я прочитал статья в Википедии и я читаю его каждый раз, когда сталкиваюсь с этим термином. Дело в том, что я никогда не понимал, что это такое.
может ли кто-нибудь объяснить мне это, объяснив "необходимость POSIX" тоже?
13 ответов
POSIX - это семейство стандартов, указанных в IEEE, чтобы уточнить и унифицировать интерфейсы прикладного программирования (и вспомогательные проблемы, такие как утилиты командной строки), предоставляемые операционными системами Unix-Y. Когда вы пишете свои программы, полагаясь на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API это не стандартизировано как часть Posix, вам будет сложнее, если и когда вы захотите перенести эту программу или библиотеку в другие системы Unix-y (например, MacOSX) в будущем.
самые важные вещи POSIX 7 определяет
-
значительно расширяет 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, который во многих случаях просто предоставляет мелкую оболочку для системных вызовов.
- дополнительные операции с файлами:
-
Е. Г.:
cd
,ls
,echo
, ...многие утилиты являются прямыми интерфейсами оболочки для соответствующей функции C API, например
mkdir
.основная реализация рабочего стола Linux: gnu Coreutils для маленьких, отдельный GNU проекты для больших:
sed
,grep
,awk
, ... Некоторые утилиты CLI реализованы Bash как встроенные модули. -
Е. Г.,
a=b; echo "$a"
основная реализация рабочего стола Linux: GNU Bash.
-
Е. Г.:
HOME
,PATH
. -
ANSI C говорит
0
илиEXIT_SUCCESS
успехов,EXIT_FAILURE
для сбоя и оставляет реализацию rest определенной.POSIX добавляет:
126
: команда найдена, но не исполняемый.127
: команда не найдена.-
> 128
: завершается сигналом.но POSIX, похоже, не указывает
128 + SIGNAL_ID
правило, используемое Bash: https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
-
существует два типа: BRE (Basic) и ERE (Extended). Basic устарел и сохраняется только для того, чтобы не нарушать API.
они реализованы функциями C API и используются во всех утилит CLI, например
grep
принимает BREs по умолчанию, и EREs с-E
.Е. Г.:
echo 'a.1' | grep -E 'a.[[:digit:]]'
основная реализация Linux: glibc реализует функции под регулярное выражение.h какие программы, как
grep
можно использовать в качестве бэкэнда. -
Е. Г.:
/dev/null
,/tmp
В Linux FHS значительно расширяет В POSIX.
-
-
/
является разделителем пути -
NUL
нельзя использовать -
.
iscwd
,..
родитель - портативное имена
- используйте максимум 14 символов и 256 для полного пути
- может содержать только:
a-zA-Z0-9._-
Читайте также: что такое соответствие posix для файловая система?
-
-
соглашения 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:
- где в настоящее время стоит реализация Microsoft Windows 7 POSIX?
- https://superuser.com/questions/495360/does-windows-8-still-implement-posix
- запрос : https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
в 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 заключается в том, что вы можете прочитать его сами:
проблема 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 особенно плох для доступа к удаленным и облачным объектам, где имеет значение высокая задержка.