it-swarm.com.ru

Что означает "POSIX"?

Что такое POSIX? Я прочитал статью в Википедии и читаю ее каждый раз, когда сталкиваюсь с термином. Дело в том, что я никогда не понимал, что это такое.

Может ли кто-нибудь объяснить мне, объясняя "необходимость POSIX" тоже?

751
claws

POSIX - это семейство стандартов, определенных IEEE , для уточнения и унификации интерфейсов прикладного программирования (и вспомогательных вопросов, таких как утилиты командной строки командной строки), предоставляемых операционной системой Unix-y. системы. Когда вы пишете свои программы, полагаясь на стандарты POSIX, вы можете быть уверены, что сможете легко переносить их между большим семейством производных Unix (включая Linux, но не ограничиваясь этим!); если и когда вы используете какой-либо Linux API, который не стандартизирован как часть Posix, вам будет труднее, если и в будущем вы захотите перенести эту программу или библиотеку на другие системы Unix-y (например, MacOSX) в будущем.

519
Alex Martelli

Самые важные вещи POSIX 7 определяет

  1. C API

    Значительно расширяет ANSI C такими вещами, как:

    • другие файловые операции: mkdir, dirname, symlink, readlink, link (жесткие ссылки), poll() , stat, sync, nftw()
    • процесс и потоки: fork, execl, pipe, semaphors 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, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.

  2. Утилиты CLI

    Например: cd, ls, echo, ...

    Многие утилиты являются прямыми интерфейсами Shell для соответствующей функции C API, например mkdir.

    Основная реализация рабочего стола Linux: GNU Coreutils для маленьких, отдельные GNU проекты для больших: sed, grep, awk, ... Некоторые утилиты CLI реализованы в Bash как встроенные модули .

  3. Язык оболочки

    Например, a=b; echo "$a"

    Основная реализация рабочего стола Linux: GNU Bash .

  4. Переменные среды

    Например: HOME, PATH.

  5. Статус выхода из программы

    ANSI C сообщает 0 или EXIT_SUCCESS для успеха, EXIT_FAILURE для сбоя и оставляет определение остальной реализации определенным.

    POSIX добавляет:

  6. Регулярное выражение

    Существует два типа: BRE (базовый) и ERE (расширенный). Basic устарел и поддерживается только для того, чтобы не нарушать API.

    Они реализуются функциями API C и используются в утилитах CLI, например, grep принимает BRE по умолчанию, а ERE с -E.

    Например: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Основная реализация Linux: glibc реализует функции в regex.h , которые такие программы, как grep, могут использовать в качестве бэкэнда.

  7. Справочник будущего

    Например: /dev/null, /tmp

    Linux FHS значительно расширяет POSIX.

  8. Имена файлов

    • / это разделитель пути
    • NUL не может быть использован
    • . является cwd, .. родительским
    • переносимые имена файлов
      • используйте максимум 14 символов и 256 для полного пути
      • может содержать только: a-zA-Z0-9._-

    Смотрите также: что такое posix соответствие для файловой системы?

  9. Соглашения 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: 

Исторический обзор официальной совместимости 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?

Get a full zipped version of the HTML pages for grepping: Where is the list of the POSIX C API functions?

POSIX is:

POSIX (произносится/ˈpɒzɪks /) или «Портативный интерфейс операционной системы [Для Unix]» 1 это имя семейства соответствующих стандартов, указанных в IEEE для определения приложения интерфейс программирования (API), а также с интерфейсами Shell и утилит для программного обеспечения, совместимого с вариантами операционной системы Unix, хотя Стандарт может применяться к любому операционная система.

По сути, это был набор мер для облегчения боли при разработке и использовании различных версий UNIX благодаря наличию (в основном) общего API и утилит. Ограниченное соответствие POSIX также распространяется на различные версии Windows.

65
cletus

Позвольте мне дать «неофициальное» объяснение.

POSIX - это набор стандартов, который пытается отличить «UNIX» и UNIX-подобные системы от несовместимых с ними. Он был создан правительством США для целей закупок. Идея заключалась в том, что федеральным закупкам США нужен был способ юридически определить требования к различным видам заявок и контрактов таким образом, чтобы их можно было использовать для исключения систем, к которым данная существующая кодовая база или программист НЕ могли бы быть переносимы.

Поскольку POSIX был написан постфактум ... для описания слабо схожего набора конкурирующих систем ... он НЕ был написан так, чтобы его можно было реализовать.

Так, например, Microsoft NT была написана с достаточным соответствием POSIX, чтобы претендовать на некоторые ставки ... хотя подсистема POSIX была практически бесполезна с точки зрения практической переносимости и совместимости с системами UNIX.

Различные другие стандарты для UNIX были написаны на протяжении десятилетий. Такие вещи, как SPEC1170 (определено одиннадцатьсот семьдесят вызовов функций, которые должны были быть реализованы совместимым образом) и различные воплощения SUS (Single UNIX Specification).

По большей части эти «стандарты» были неадекватны любому практическому техническому применению. Большинство из них существуют для аргументации, юридических споров и других неблагополучных причин.

40
Jim Dennis

POSIX - это набор стандартов, выдвинутых IEEE и The Open Group, который описывает, как будет работать идеальный Unix. Программисты, пользователи и администраторы могут ознакомиться с документом POSIX и ожидать, что POSIX-жалоба Unix обеспечит все перечисленные стандартные средства.

Так как каждый Unix делает вещи немного по-своему - у Solaris, Mac OS X, IRIX, BSD и Linux есть свои причуды - POSIX особенно полезен для тех, кто в отрасли, так как он определяет стандартную среду для работы. Например, большинство функций в библиотеке C основано на POSIX; поэтому программист может использовать его в своем приложении и ожидать, что он будет вести себя одинаково в большинстве Unices.

Тем не менее, различные области Unix, как правило, в центре внимания, а не стандартные.

Самое замечательное в POSIX - вы можете прочитать его сами:

Открытая группа базовых спецификаций, выпуск 7

Выпуск 7 известен как POSIX.1-2008, и в нем есть что-то новое - однако, Google-fu для POSIX.1 и тому подобное позволит вам увидеть всю историю создания Unix.

28
Jed Smith

POSIX - это стандарт для операционных систем, который должен был облегчить написание кроссплатформенного программного обеспечения. Это особенно важно в мире Unix.

27
Hank Gay

В 1985 году люди из компаний всей компьютерной индустрии объединились для разработки стандарта POSIX (Portable Operating System Interface for Computer Environments), который в значительной степени основан на на определение интерфейса UNIX System V (SVID) и другие ранее усилия по стандартизации. Эти усилия были стимулированы США. правительство, которое нуждается в стандартной вычислительной среде для минимизации затраты на обучение и закупки. Выпущенный в 1988 году, POSIX является группой стандартов IEEE, определяющих интерфейсы API, Shell и утилит для операционной системы. Хотя он предназначен для UNIX-подобных систем, Стандарты могут применяться к любой совместимой операционной системе. Теперь, когда эти Стандарты получили признание, разработчики программного обеспечения могут разрабатывать приложения, которые работают на всех соответствующих версиях UNIX, Linux и другие операционные системы.

Из книги: Практическое руководство по Linux

5
Koray Tugay

Posix больше похож на ОС, это «стандарт ОС». Вы можете представить ее как воображаемую ОС, которой на самом деле не существует, но у нее есть документация. Эти документы являются «стандартом posix», определенным IEEE, который является крупной организацией по стандартизации США Операционные системы, реализующие эту спецификацию, «Posix-совместимы».

Государственное регулирование предпочитает решения Posix-совместимые в своих инвестициях, поэтому совместимость с Posix имеет значительные финансовые преимущества, особенно для крупных ИТ-компаний США.

Награда за то, что ОС полностью совместима с posix, это гарантия того, что она будет беспрепятственно компилировать и запускать все приложения, совместимые с Posix.

Linux является наиболее известным. OSX, Solaris, NetBSD и Windows NT также играют здесь. Free- и OpenBSD только "почти" совместимы с Posix. Послегарантийное соответствие WinNT является лишь псевдо-решением, чтобы избежать вышеуказанного государственного регулирования.

2
peterh

Этот стандарт обеспечивает общую основу для Unix-подобных операционных систем. Он определяет, как должна работать Shell, что ожидать от таких команд, как ls и grep, и от ряда библиотек C, которые авторы C могут ожидать получить в наличии.

Например, каналы, которые пользователи командной строки используют для объединения команд, подробно описаны здесь, что означает, что функция popen (открытие канала) в C соответствует стандарту POSIX, а не ISO C.

2
Koray Tugay

POSIX определяет набор стандартов для операционной системы или программы ........ Цель - написать новое программное обеспечение, совместимое с UNIX-подобными системами.

Например, программа, работающая в Linux, также может быть скомпилирована и запущена в других UNIX-подобных системах, таких как Solaris, HP-UX, AIX и т.д.

Наиболее популярными примерами являются GNU Bash, который соответствует 100% POSIX и утилита gawk.

0
sras

Спецификация (план) о том, как сделать ОС совместимой с поздней ОС UNIX (да благословит его Бог!). Вот почему macOS и GNU/Linux имеют очень похожие терминальные командные строки, графические интерфейсы, библиотеки и т.д. Потому что они оба были разработаны в соответствии с планом POSIX.

POSIX не говорит инженерам и программистам, как кодировать, но что кодировать.

0
MCH

Posix управляет совместимостью, переносимостью и другими областями, такими как использование и механизм разветвления, разрешения и стандарты файловой системы, такие как/etc,/var,/usr и т. д. , Следовательно, когда разработчики пишут программу под Posix-совместимой системой, такой как, например, Linux, как правило, не всегда гарантируется работа в другой posix-совместимой системе, такой как система IBM AIX или другие коммерческие варианты Unix. Posix - хорошая вещь, так как она облегчает разработку программного обеспечения для максимальной мобильности, к которой он стремится. Надеюсь, что этот ответ имеет смысл. 

Спасибо Jed Smith & Tinkertim за указание на мою ошибку - моя плохая !!! :(

0
t0mm13b

POSIX обозначает переносимый интерфейс операционной системы и является стандартом IEEE, разработанным для облегчения переносимости приложений. POSIX - это попытка консорциума поставщиков создать единую стандартную версию UNIX.

0
Farruh Habibullaev

Некоторые факты о POSIX, которые не так ярки. 

POSIX также является интерфейсом системного вызова или API, и ему почти 30 лет.  

Он был разработан для сериализованного доступа к данным в локальном хранилище, используя отдельные компьютеры с одним ЦП.

Безопасность не была главной проблемой в POSIX, так как в течение многих лет приводила к многочисленным атакам в условиях гонки и вынуждала программистов обходить эти ограничения. 

Серьезные ошибки все еще обнаруживаются, ошибки, которые можно было бы предотвратить с помощью более безопасного дизайна POSIX API. 

POSIX ожидает, что пользователи будут выполнять один синхронный вызов за раз и ждут его результатов, прежде чем отправлять следующий. Сегодняшние программисты рассчитывают выдавать много асинхронных запросов одновременно, чтобы повысить общую пропускную способность. 

Этот синхронный API особенно плох для доступа к удаленным и облачным объектам, где важны большие задержки.

0
prosti