Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.
Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?
Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.
Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?
Ответы:
POSIX - это семейство стандартов, определенных IEEE , для уточнения и унификации интерфейсов прикладного программирования (и вспомогательных вопросов, таких как утилиты командной строки), предоставляемых операционными системами Unix-y. Когда вы пишете свои программы, основываясь на стандартах POSIX, вы можете быть уверены, что сможете легко переносить их между большим семейством производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете какой-либо Linux API, который не стандартизирован как часть Posix, вам будет труднее, если и в будущем вы захотите портировать эту программу или библиотеку на другие системы Unix-y (например, MacOSX) в будущем.
Microsoft's market share on desktops, at least, makes it "what the world follows"
- Интересно отметить, насколько многое изменилось с момента этого комментария 2009 года :)
Самые важные вещи, которые определяет POSIX 7
Значительно расширяет 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, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.
Например: 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: /unix/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
).
Несколько широко используемых соглашений:
-
означает STDIN, где файл ожидается--
завершает флаги, например, 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
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?
POSIX это:
POSIX (произносится / ˈpɒzɪks /) или «Портативный интерфейс операционной системы [для Unix]» 1 - это название семейства связанных стандартов, определенных IEEE для определения интерфейса прикладного программирования (API), а также интерфейсов оболочки и утилит для программного обеспечения. совместим с вариантами операционной системы Unix, хотя стандарт может применяться к любой операционной системе.
По сути, это был набор мер для облегчения боли при разработке и использовании различных версий UNIX благодаря наличию (в основном) общего API и утилит. Ограниченное соответствие POSIX также распространяется на различные версии Windows.
Позвольте мне дать «неофициальное» объяснение.
POSIX - это набор стандартов, который пытается отличить «UNIX» и UNIX-подобные системы от тех, которые несовместимы с ними. Он был создан правительством США для целей закупок. Идея заключалась в том, что федеральным закупкам США нужен был способ юридически определить требования к различным видам заявок и контрактов таким образом, чтобы их можно было использовать для исключения систем, к которым данная существующая кодовая база или программист НЕ были бы переносимы.
Поскольку POSIX был написан постфактум ... для описания слабо схожего набора конкурирующих систем ... он НЕ был написан так, чтобы его можно было реализовать.
Так, например, NT для Microsoft был написан с достаточным соответствием POSIX, чтобы претендовать на некоторые ставки ... хотя подсистема POSIX была практически бесполезна с точки зрения практической переносимости и совместимости с системами UNIX.
Различные другие стандарты для UNIX были написаны на протяжении десятилетий. Такие вещи, как SPEC1170 (указано 11 000 вызовов функций, которые должны были быть реализованы совместимым образом) и различные воплощения 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. Послегарантийное соответствие WinNT является лишь псевдо-решением, чтобы избежать вышеуказанного государственного регулирования.
Этот стандарт обеспечивает общую основу для Unix-подобных операционных систем. Он определяет, как должна работать оболочка, что ожидать от таких команд, как ls и grep, а также от ряда библиотек C, которые авторы C могут ожидать получить.
Например, каналы, которые пользователи командной строки используют для объединения команд, подробно описаны здесь, что означает, что функция popen (открытие канала) в C соответствует стандарту POSIX, а не ISO C.
POSIX означает переносимый интерфейс операционной системы и является стандартом IEEE, разработанным для облегчения переносимости приложений. POSIX - это попытка консорциума поставщиков создать единую стандартную версию UNIX.
POSIX определяет набор стандартов для операционной системы или программы. Цель состоит в том, чтобы написать новое программное обеспечение, совместимое с UNIX-подобными системами.
Например, программа, работающая в Linux, также может быть скомпилирована и запущена в других UNIX-подобных системах, таких как Solaris, HP-UX, AIX и т. Д.
Наиболее популярными примерами являются GNU Bash
100% -ное соответствие и gawk
полезность POSIX .
Posix управляет совместимостью, переносимостью и в других областях, таких как использование и механизм fork, разрешения и стандарты файловой системы, такие как / etc, / var, / usr и так далее . Следовательно, когда разработчики пишут программу под Posix-совместимой системой, такой как, например, Linux, как правило, не всегда гарантируется запуск в другой posix-совместимой системе, такой как система IBM AIX или другие коммерческие варианты Unix. Posix - хорошая вещь, так как она облегчает разработку программного обеспечения для максимальной мобильности, к которой он стремится. Надеюсь, что этот ответ имеет смысл.
Спасибо Jed Smith & Tinkertim за указание на мою ошибку - моя плохая !!! :(
Спецификация (проект) о том, как сделать ОС совместимой с поздней ОС UNIX (да благословит его Бог!). Вот почему macOS и GNU / Linux имеют очень похожие терминальные командные строки, графические интерфейсы, библиотеки и т. Д. Потому что они оба были разработаны в соответствии с планом POSIX.
POSIX не говорит инженерам и программистам, как кодировать, но что кодировать.
Некоторые факты о POSIX, которые не так ярки.
POSIX также является интерфейсом системного вызова или API, и ему почти 30 лет.
Он был разработан для последовательного доступа к данным на локальном хранилище с использованием одного компьютера с одним процессором.
Безопасность не была главной проблемой в POSIX, так как в течение многих лет приводила к многочисленным атакам в условиях гонки и заставляла программистов обходить эти ограничения.
Серьезные ошибки все еще обнаруживаются, ошибки, которые можно было бы предотвратить с помощью более безопасного дизайна POSIX API.
POSIX ожидает, что пользователи будут выполнять один синхронный вызов за раз и ждут его результатов, прежде чем отправлять следующий. Сегодняшние программисты рассчитывают выдавать много асинхронных запросов одновременно, чтобы повысить общую пропускную способность.
Этот синхронный API особенно плох для доступа к удаленным и облачным объектам, где важны большие задержки.