Что означает "POSIX"?
16 ответов
POSIX - это семейство стандартов, определенных IEEE, для уточнения и унификации интерфейсов прикладного программирования (и вспомогательных вопросов, таких как утилиты командной строки), предоставляемых операционными системами Unix-y. Когда вы пишете свои программы, полагаясь на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их между большим семейством производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете какой-либо Linux API, который не стандартизирован как часть Posix, вам будет труднее, если и в будущем вы захотите портировать эту программу или библиотеку на другие системы Unix-y (например, MacOSX) в будущем.
Самые важные вещи, которые определяет POSIX 7
Значительно расширяет ANSI C такими вещами, как:
- больше файловых операций:
mkdir
,dirname
,symlink
,readlink
,link
(жесткие ссылки),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
за неудачу и оставляет определение остальной реализации определенным.POSIX добавляет:
126
: команда найдена, но не исполняемая.127
: команда не найдена.> 128
: прекращается сигналом.Но POSIX, похоже, не определяет
128 + SIGNAL_ID
Правило, используемое Bash: https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
Существует два типа: BRE (базовый) и ERE (расширенный). Basic устарел и поддерживается только для того, чтобы не нарушать API.
Они реализуются функциями API C и используются в утилитах CLI, например
grep
принимает BRE по умолчанию, а ERE с-E
,Например:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Основная реализация Linux: glibc реализует функции в regex.h, такие программы, как
grep
можно использовать как бэкэнд.Например:
/dev/null
,/tmp
Linux FHS значительно расширяет POSIX.
/
это разделитель путиNUL
не может быть использован.
являетсяcwd
,..
родитель- переносимые имена файлов
- используйте максимум 14 символов и 256 для полного пути
- может содержать только:
a-zA-Z0-9._-
Смотрите также: что такое posix-соответствие для файловой системы?
Соглашения API утилиты командной строки
Не обязательно, используется POSIX, но почти нигде, особенно в GNU. Но верно, это слишком ограничительно, например, только однобуквенные флаги (например,
-a
), нет длинных версий с двойным дефисом (например,--all
).Несколько широко используемых соглашений:
-
означает STDIN, где файл ожидается--
завершает флаги, напримерls -- -l
перечислить каталог с именем-l
Смотрите также: Существуют ли стандарты для ключей и аргументов командной строки Linux?
Кто соответствует POSIX?
Многие системы строго следуют POSIX, но немногие фактически сертифицированы Open Group, которая поддерживает стандарт. Известные сертифицированные включают в себя:
- OS X (Apple) X обозначает как 10, так и UNIX. Была ли первая система Apple POSIX выпущена около 2001 года. См. Также: OSX - это операционная система POSIX?
- AIX (IBM)
- HP-UX (HP)
- Солярис (Оракул)
Большинство дистрибутивов Linux очень совместимы, но не сертифицированы, потому что они не хотят оплачивать проверку соответствия. Inspur K-UX и Huawei EulerOS являются двумя сертифицированными примерами.
Официальный список сертифицированных систем можно найти по адресу: https://www.opengroup.org/openbrand/register/ а также на вики-странице.
Windows
Windows внедрила POSIX в некоторых своих профессиональных дистрибутивах.
Поскольку это была необязательная функция, программисты не могли полагаться на нее для большинства приложений конечного пользователя.
Поддержка устарела в Windows 8:
- Где в настоящее время находится реализация POSIX для Microsoft Windows 7?
- 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 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?
Бонусный уровень
Стандартная база Linux расширяет POSIX.
Используйте некадровые индексы, они гораздо более читабельны и доступны для поиска: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Получите полную версию HTML-страниц для ознакомления: где находится список функций API POSIX C?
POSIX это:
POSIX (произносится /ˈpɒzɪks/) или "Интерфейс переносимой операционной системы [для Unix]" 1 - это название семейства связанных стандартов, определенных IEEE для определения интерфейса прикладного программирования (API), а также интерфейсов оболочки и утилит для программного обеспечения. совместим с вариантами операционной системы Unix, хотя стандарт может применяться к любой операционной системе.
По сути, это был набор мер для облегчения боли при разработке и использовании различных версий UNIX благодаря наличию (в основном) общего API и утилит. Ограниченное соответствие POSIX также распространяется на различные версии Windows.
Позвольте мне дать "неофициальное" объяснение.
POSIX - это набор стандартов, который пытается отличить "UNIX" и UNIX-подобные системы от несовместимых с ними. Он был создан правительством США для целей закупок. Идея заключалась в том, что федеральным закупкам США нужен был способ юридически определить требования к различным видам заявок и контрактов таким образом, чтобы их можно было использовать для исключения систем, к которым данная существующая база кода или персонал по программированию НЕ были бы переносимы.
Поскольку POSIX был написан постфактум... для описания слабо схожего набора конкурирующих систем... он НЕ был написан так, чтобы его можно было реализовать.
Так, например, Microsoft NT была написана с достаточным соответствием POSIX, чтобы претендовать на некоторые ставки... хотя подсистема POSIX была практически бесполезна с точки зрения практической переносимости и совместимости с системами UNIX.
Различные другие стандарты для UNIX были написаны на протяжении десятилетий. Такие вещи, как SPEC1170 (определено одиннадцатьсот семьдесят вызовов функций, которые должны были быть реализованы совместимым образом) и различные воплощения SUS (Single UNIX Specification).
По большей части эти "стандарты" были неадекватны любому практическому техническому применению. Большинство из них существуют для аргументации, юридических споров и других неблагополучных причин.
POSIX - это стандарт для операционных систем, который должен был облегчить написание кроссплатформенного программного обеспечения. Это особенно важно в мире Unix.
POSIX - это набор стандартов, выдвинутых IEEE и The Open Group, который описывает, как будет работать идеальный Unix. Программисты, пользователи и администраторы могут ознакомиться с документом POSIX и ожидать, что POSIX-жалоба Unix обеспечит все перечисленные стандартные средства.
Так как каждый Unix делает вещи немного по-своему - у Solaris, Mac OS X, IRIX, BSD и Linux есть свои причуды - POSIX особенно полезен для тех, кто в отрасли, так как он определяет стандартную среду для работы. Например, большинство функций в библиотеке C основано на POSIX; поэтому программист может использовать его в своем приложении и ожидать, что он будет вести себя одинаково в большинстве Unices.
Тем не менее, различные области Unix, как правило, в центре внимания, а не стандартные.
Самое замечательное в POSIX - вы можете прочитать его сами:
Выпуск 7 известен как POSIX.1-2008, и в нем есть что-то новое - однако, Google-fu для POSIX.1 и тому подобное позволит вам увидеть всю историю создания Unix.
В 1985 году представители компаний компьютерной индустрии объединились для разработки стандарта POSIX (переносимого интерфейса операционной системы для компьютерных сред), который в значительной степени основан на определении интерфейса UNIX System V (SVID) и других более ранних усилиях по стандартизации. Эти усилия были стимулированы правительством США, которому требовалась стандартная вычислительная среда для минимизации затрат на обучение и закупки. Выпущенный в 1988 году, POSIX представляет собой группу стандартов IEEE, которые определяют интерфейсы API, оболочки и служебных программ для операционной системы. Хотя стандарты предназначены для UNIX-подобных систем, стандарты могут применяться к любой совместимой операционной системе. Теперь, когда эти стандарты получили признание, разработчики программного обеспечения могут разрабатывать приложения, которые работают на всех соответствующих версиях UNIX, Linux и других операционных систем.
Из книги: Практическое руководство по Linux
Posix больше похож на ОС, это "стандарт ОС". Вы можете представить ее как воображаемую ОС, которой на самом деле не существует, но у нее есть документация. Эти документы являются "стандартом posix", определенным IEEE, который является крупной организацией стандартов США. Операционные системы, реализующие эту спецификацию, являются "Posix-совместимыми".
Государственное регулирование предпочитает Posix-совместимые решения в своих инвестициях, поэтому, будучи Posix-совместимым, имеет значительные финансовые преимущества, особенно для крупных ИТ-компаний США.
Награда за то, что ОС полностью совместима с posix, это гарантия того, что она будет беспрепятственно компилировать и запускать все приложения, совместимые с Posix.
Linux является наиболее известным. OSX, Solaris, NetBSD и Windows NT также играют здесь. Free- и OpenBSD только "почти" совместимы с Posix. Соответствие posix WinNT является лишь псевдо-решением, чтобы избежать вышеуказанного государственного регулирования.
POSIX означает переносимый интерфейс операционной системы и является стандартом IEEE, разработанным для облегчения переносимости приложений. POSIX - это попытка консорциума поставщиков создать единую стандартную версию UNIX.
Этот стандарт обеспечивает общую основу для Unix-подобных операционных систем. Он указывает, как должна работать оболочка, чего ожидать от таких команд, как ls и grep, и от ряда библиотек C, которые авторы C могут ожидать получить.
Например, каналы, которые пользователи командной строки используют для объединения команд, подробно описаны здесь, что означает, что функция popen (открытие канала) в C соответствует стандарту POSIX, а не ISO C.
POSIX означает интерфейс переносимой операционной системы для Uni X. _ _
POSIX — это набор стандартов, кодифицированных IEEE и выпущенных ANSI и ISO. Цель POSIX — облегчить задачу разработки кросс-платформенного программного обеспечения, устанавливая набор рекомендаций, которым должны следовать поставщики операционных систем. В идеале разработчик должен написать программу только один раз, чтобы она работала на всех POSIX-совместимых системах. Большинство современных коммерческих реализаций Unix и многие бесплатные версии совместимы с POSIX. На самом деле существует несколько различных выпусков POSIX, но наиболее важными из них являются POSIX.1 и POSIX.2, которые определяют системные вызовы и интерфейс командной строки соответственно.
Спецификации POSIX описывают операционную систему, похожую на Unix, но не обязательно такую же. Хотя POSIX в значительной степени основан на выпусках BSD и System V, системы, отличные от Unix, такие как Microsoft Windows NT и IBM OpenEdition MVS, совместимы с POSIX.
Некоторые факты о POSIX, которые не так ярки.
POSIX также является интерфейсом системного вызова или API, и ему почти 30 лет.
Он был разработан для последовательного доступа к данным на локальном хранилище с использованием одного компьютера с одним процессором.
Безопасность не была главной проблемой в POSIX, так как в течение многих лет приводила к многочисленным атакам в условиях гонки и заставляла программистов обходить эти ограничения.
Серьезные ошибки все еще обнаруживаются, ошибки, которые могли бы быть предотвращены с помощью более безопасного дизайна POSIX API.
POSIX ожидает, что пользователи будут выполнять по одному синхронному вызову за раз и ждут его результатов, прежде чем отправлять следующий. Сегодняшние программисты рассчитывают выдавать много асинхронных запросов одновременно, чтобы улучшить общую пропускную способность.
Этот синхронный API особенно плох для доступа к удаленным и облачным объектам, где важны большие задержки.
POSIX определяет набор стандартов для операционной системы или программы. Цель состоит в том, чтобы написать новое программное обеспечение, совместимое с UNIX-подобными системами.
Например, программа, работающая в Linux, также может быть скомпилирована и запущена в других UNIX-подобных системах, таких как Solaris, HP-UX, AIX и т. Д.
Самые популярные примеры GNU Bash
что соответствует 100% POSIX и gawk
полезность.
Спецификация (план) о том, как сделать ОС совместимой с поздней ОС UNIX (да благословит его Бог!). Вот почему macOS и GNU/Linux имеют очень похожие терминальные командные строки, графические интерфейсы, библиотеки и т. Д. Потому что они оба были разработаны в соответствии с планом POSIX.
POSIX не говорит инженерам и программистам, как кодировать, но что кодировать.
В одном предложении это набор стандартов, состоящий из библиотек, макросов, системных вызовов, функций потоков, функций обработки ввода-вывода, функций, связанных с системой и т. д., который помогает повысить переносимость вашего кода, который в основном будет выполняться в среде Unix, Linux.
Posix управляет совместимостью, переносимостью и другими областями, такими как использование и механизм fork, разрешения и стандарты файловой системы, такие как /etc, /var, /usr и так далее. Следовательно, когда разработчики пишут программу под Posix-совместимой системой, такой как, например, Linux, как правило, не всегда гарантируется запуск в другой posix-совместимой системе, такой как система IBM AIX или другие коммерческие варианты Unix. Posix - это хорошая вещь, так как она облегчает разработку программного обеспечения для максимальной мобильности, к которой он стремится. Надеюсь, что этот ответ имеет смысл.
Спасибо Jed Smith & Tinkertim за указание на мою ошибку - моя плохая!!!:(