Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.
Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?
POSIX - это семейство стандартов, указанных IEEE, чтобы прояснить и унифицировать интерфейсы прикладного программирования (и вспомогательные проблемы, такие как утилиты командной строки командной строки), предоставляемые операционными системами Unix-y. Когда вы пишете свои программы, чтобы полагаться на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства Unix-производных (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API, который не стандартизован как часть Posix, вам будет труднее, если и когда вы захотите перенести эту программу или библиотеку в другие Unix-y-системы (например, MacOSX) в будущем.
Самые важные вещи, которые определяет POSIX 7
Значительно расширяет 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, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.
Например: cd
, ls
, echo
,...
Многие утилиты являются прямыми оболочками для соответствующей функции C API, например, mkdir
.
Основная реализация Linux для настольных систем: GNU Coreutils для маленьких, отдельные проекты GNU для больших: sed
, grep
, awk
,... Некоторые утилиты CLI реализованы Bash как встроенные.
Например, a=b; echo "$a"
a=b; echo "$a"
Основная реализация рабочего стола Linux: GNU Bash.
Например: HOME
, PATH
.
ANSI C сообщает 0
или EXIT_SUCCESS
для успеха, EXIT_FAILURE
для сбоя и оставляет определение остальной реализации определенным.
POSIX добавляет:
126
: команда найдена, но не выполнима.
127
: команда не найдена.
> 128
: прекращается сигналом.
Но в POSIX, похоже, не 128 + SIGNAL_ID
правило 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:]]'
echo 'a.1' | grep -E 'a.[[:digit:]]'
Основная реализация Linux: glibc реализует функции в regex.h, которые такие программы, как grep
могут использовать в качестве бэкэнда.
Например: /dev/null
, /tmp
Linux FHS значительно расширяет POSIX.
/
является разделителем путиNUL
не может быть использован.
это cwd
, ..
родительa-zA-Z0-9._-
См. Также: что такое соответствие posix для файловой системы?
Соглашения 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?
POSIX (произносится/pɒzɒks/) или "Интерфейс портативной операционной системы [для Unix]" 1 - это имя семьи соответствующих стандартов, установленных IEEE для определения приложения программный интерфейс (API), с интерфейсами оболочки и утилиты для программного обеспечения, совместимого с вариантами операционной системы Unix, хотя стандарт может применяться к любому операционной системы.
В основном это был набор мер, чтобы облегчить боль развития и использования различных вкусов UNIX, имея (в основном) общий API и утилиты. Ограниченное соответствие POSIX также распространяется на различные версии Windows.
Позвольте мне дать резкое "неофициальное" объяснение.
POSIX - это набор стандартов, который пытается отличить системы UNIX и UNIX от тех, которые несовместимы с ними. Он был создан правительством США для целей закупок. Идея заключалась в том, что федеральные закупки США нуждались в способе юридически определять требования к различным видам заявок и контрактам таким образом, чтобы их можно было использовать для исключения систем, в которых данная существующая база кода или персонал по программированию НЕ были бы портативными.
Так как POSIX был написан post facto... для описания слабо аналогичного набора конкурирующих систем... он НЕ был написан таким образом, чтобы его можно было реализовать.
Итак, например, Microsoft NT была написана с достаточным соответствием POSIX, чтобы претендовать на некоторые ставки... хотя подсистема POSIX была практически бесполезной с точки зрения практической мобильности и совместимости с системами UNIX.
В течение десятилетий были написаны различные стандарты для UNIX. Такие вещи, как SPEC1170 (заданы одиннадцать сотен семидесятых вызовов функций, которые должны быть реализованы совместимо) и различные инкарнации SUS (Single UNIX Specification).
По большей части эти "стандарты" были недостаточны для любого практического технического применения. Они больше всего существуют для аргументации, правовых споров и других дисфункциональных причин.
POSIX - это стандарт для операционных систем, который должен был облегчить работу с кросс-платформенным программным обеспечением. Это особенно важно в мире Unix.
POSIX - это набор стандартов, предложенных IEEE и 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 (Portable Operating System Интерфейс для компьютерных сред), который основан в основном в определении интерфейса VIX системы UNIX (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. Послегарантийное соответствие WinNT является лишь псевдо-решением, чтобы избежать вышеуказанного государственного регулирования.
Этот стандарт обеспечивает общую основу для Unix-подобных операционных систем. Он указывает, как должна работать оболочка, чего ожидать от таких команд, как ls и grep, и ряда библиотек C, которые авторы C могут ожидать иметь.
Например, здесь подробно описаны каналы, которые используют пользователи командной строки для объединения вместе команд, что означает, что функция Cs popen (pipe open) является стандартом POSIX, а не стандартом ISO C.
Некоторые факты о POSIX, которые не так ярки.
POSIX также является интерфейсом системного вызова или API, и ему почти 30 лет.
Он был разработан для последовательного доступа к данным на локальном хранилище с использованием одного компьютера с одним процессором.
Безопасность не была главной проблемой в POSIX, так как в течение многих лет приводила к многочисленным атакам в условиях гонки и вынуждала программистов обходить эти ограничения.
Серьезные ошибки все еще обнаруживаются, ошибки, которые можно было бы предотвратить с помощью более безопасного дизайна POSIX API.
POSIX ожидает, что пользователи будут выполнять один синхронный вызов за раз и ждут его результатов, прежде чем отправлять следующий. Сегодня программисты ожидают одновременного выполнения множества асинхронных запросов для повышения общей пропускной способности.
Этот синхронный API особенно плох для доступа к удаленным и облачным объектам, где важны большие задержки.
Спецификация (план) о том, как сделать ОС совместимой с поздней ОС UNIX (да благословит его Бог!). Вот почему macOS и GNU/Linux имеют очень похожие терминальные командные строки, графические интерфейсы, библиотеки и т.д. Потому что они оба были разработаны в соответствии с планом POSIX.
POSIX не говорит инженерам и программистам, как кодировать, но что кодировать.
Когда вы пишете свои программы, чтобы полагаться на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API, который не стандартизован как часть Posix, вам будет труднее, если и когда вы захотите перенести эту программу или библиотеку в другие Unix-y-системы (например, MacOSX) в будущем.
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 за то, что я указал на свою ошибку - мой плохой!!!: (