Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.
Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?
Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.
Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?
POSIX - это семейство стандартов, указанных IEEE, чтобы прояснить и унифицировать интерфейсы прикладного программирования (и вспомогательные проблемы, такие как утилиты командной строки командной строки), предоставляемые операционными системами Unix-y. Когда вы пишете свои программы, чтобы полагаться на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства Unix-производных (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API, который не стандартизован как часть Posix, вам будет труднее, если и когда вы захотите перенести эту программу или библиотеку в другие Unix-y-системы (например, MacOSX) в будущем.
Самые важные вещи POSIX 7 определяет
Значительно расширяет ANSI C такими вещами, как:
mkdir
, dirname
, symlink
, readlink
, link
(жесткие ссылки), poll()
, stat
, sync
, nftw()
fork
, execl
, wait
, 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"
Основная реализация Linux для настольных ПК: GNU Bash.
Например: HOME
, PATH
.
PATH
указана семантика поиска, включая , как косые черты предотвращают 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
, ..
родительa-zA-Z0-9._-
См. также: Что такое соответствие posix для файловой системы?
Соглашения API утилиты командной строки
Не обязательно, используется POSIX, но почти нигде, особенно в GNU. Но правда, это слишком ограничительно, например, только однобуквенные флаги (например, -a
), без длинных версий с двойным дефисом (например, --all
).
Несколько широко используемых соглашений:
-
означает стандартный ввод файла, где ожидается--
завершает флаги, например, ls -- -l
для просмотра каталога с именем -l
См. также: Существуют ли стандарты для параметров и аргументов командной строки Linux?
"POSIX ACL" (списки контроля доступа), например, используется в качестве бэкэнда для setfacl
.
Это было отозвано, но оно было реализовано в нескольких ОС, включая в Linux с setxattr
.
Кто соответствует POSIX?
Многие системы строго следуют POSIX, но немногие фактически сертифицированы Open Group, которая поддерживает стандарт. Известные сертифицированные включают в себя:
Большинство дистрибутивов Linux очень совместимы, но не сертифицированы, поскольку не хотят оплачивать проверку соответствия. Inspur K-UX и Huawei EulerOS - два сертифицированных примера.
Официальный список сертифицированных систем можно найти по адресу: https://www.opengroup.org/openbrand/register/, а также на вики-странице.
Окна
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, который "предоставляет существенные функциональные возможности 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-страниц для ознакомления: Где находится список функций 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 - это набор стандартов, предложенных 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.
POSIX - это стандарт для операционных систем, который должен был облегчить работу с кросс-платформенным программным обеспечением. Это особенно важно в мире Unix.
В 1985 году люди из компаний в компьютерной индустрии объединились для разработки POSIX (Portable Operating System Интерфейс для компьютерных сред), который основан в основном в определении интерфейса VIX системы UNIX (SVID) и других ранее усилия по стандартизации. Эти усилия были подкреплены США. правительство, которому нужна стандартная вычислительная среда для минимизации его расходы на обучение и закупки. Выпущенный в 1988 году, POSIX - это группа стандартов IEEE, которые определяют интерфейсы API, оболочки и служебных программ для операционной системы. Несмотря на то, что для UNIX-подобных систем стандарты могут применяться к любой совместимой операционной системе. Теперь, когда эти стандарты получили признание, разработчики программного обеспечения способны разрабатывать приложения, которые запускаются во всех соответствующих версиях UNIX, Linux и других операционных систем.
Из книги: Практическое руководство по Linux
Этот стандарт обеспечивает общую основу для Unix-подобных операционных систем. Он указывает, как должна работать оболочка, чего ожидать от таких команд, как ls и grep, и ряда библиотек C, которые авторы C могут ожидать иметь.
Например, здесь подробно описаны каналы, которые используют пользователи командной строки для объединения вместе команд, что означает, что функция Cs popen (pipe open) является стандартом POSIX, а не стандартом ISO C.
Posix больше похож на ОС, это "стандарт ОС". Вы можете представить ее как воображаемую ОС, которой на самом деле не существует, но у нее есть документация. Эти документы являются "стандартом posix", определенным IEEE, который является крупной организацией стандартов США. Операционные системы, реализующие эту спецификацию, являются "Posix-совместимыми".
Государственное регулирование предпочитает решения Posix-совместимые в своих инвестициях, поэтому совместимость с Posix имеет значительные финансовые преимущества, особенно для крупных ИТ-компаний США.
Награда за то, что ОС полностью совместима с posix, это гарантия того, что она будет беспрепятственно компилировать и запускать все приложения, совместимые с Posix.
Linux является наиболее известным. OSX, Solaris, NetBSD и Windows NT также играют здесь. Free- и OpenBSD только "почти" совместимы с Posix. Послегарантийное соответствие WinNT является лишь псевдо-решением, чтобы избежать вышеуказанного государственного регулирования.
POSIX означает переносимый интерфейс операционной системы и является стандартом IEEE, разработанным для облегчения переносимости приложений. POSIX - это попытка консорциума поставщиков создать единую стандартную версию UNIX.
Posix управляет взаимодействием, переносимостью и другими областями, такими как использование и механизм fork, разрешения и стандарты файловой системы, такие как /etc,/var,/usr и т.д.. Следовательно, когда разработчики пишут программу под совместимой с Posix системой, такой как, например, Linux, как правило, не всегда гарантируется запуск в другой совместимой с posix системе, такой как система IBM AIX или другие коммерческие варианты Unix. Posix - хорошая вещь, поскольку она облегчает разработку программного обеспечения для максимальной мобильности, к которой он стремится. Надеюсь, что этот ответ имеет смысл.
Благодаря Jed Smith и Tinkertim за то, что я указал на свою ошибку - мой плохой!!!: (
POSIX определяет набор стандартов для операционной системы или программы. Цель состоит в том, чтобы написать новое программное обеспечение, совместимое с UNIX-подобными системами.
Например, программа, запущенная на Linux, также может компилироваться и запускаться на других UNIX-подобных системах, таких как Solaris, HP-UX и AIX и т.д.
Наиболее популярными примерами являются GNU Bash
, который является 100% -ной совместимостью POSIX и утилитой gawk
.
Когда вы пишете свои программы, чтобы полагаться на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их среди большого семейства производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете некоторый Linux API, который не стандартизован как часть Posix, вам будет труднее, если и когда вы захотите перенести эту программу или библиотеку в другие Unix-y-системы (например, MacOSX) в будущем.
Спецификация (план) о том, как сделать ОС совместимой с поздней ОС UNIX (да благословит его Бог!). Вот почему macOS и GNU/Linux имеют очень похожие терминальные командные строки, графические интерфейсы, библиотеки и т.д. Потому что они оба были разработаны в соответствии с планом POSIX.
POSIX не говорит инженерам и программистам, как кодировать, но что кодировать.
Некоторые факты о POSIX, которые не так ярки.
POSIX также является интерфейсом системного вызова или API, и ему почти 30 лет.
Он был разработан для последовательного доступа к данным на локальном хранилище с использованием одного компьютера с одним процессором.
Безопасность не была главной проблемой в POSIX, так как в течение многих лет приводила к многочисленным атакам в условиях гонки и вынуждала программистов обходить эти ограничения.
Серьезные ошибки все еще обнаруживаются, ошибки, которые можно было бы предотвратить с помощью более безопасного дизайна POSIX API.
POSIX ожидает, что пользователи будут выполнять один синхронный вызов за раз и ждут его результатов, прежде чем отправлять следующий. Сегодня программисты ожидают одновременного выполнения множества асинхронных запросов для повышения общей пропускной способности.
Этот синхронный API особенно плох для доступа к удаленным и облачным объектам, где важны большие задержки.