it-swarm-ru.tech

Что именно POSIX?

Я вижу, что POSIX упоминается часто и везде, и я предполагал, что он является базовым стандартом UNIX ... пока я не заметил следующую выдержку на странице Википедии: Открытая группа знак равно

Open Group наиболее известна как орган по сертификации товарного знака UNIX и публикации технического стандарта Single UNIX Specification, который расширяется стандарты POSIX и является официальным определением системы UNIX.

Если официальное определение системы UNIX является расширением POSIX, то что такое POSIX? Это, безусловно, кажется пробным камнем в мире UNIX, но я не знаю, как это вписывается в общую картину.

144
Peter.O

POSIX впервые был стандартом в 1988 году, задолго до спецификации Single UNIX. Это была одна из попыток объединения всех различных вилок UNIX и UNIX-подобных систем. POSIX является стандартом IEEE, но поскольку IEEE не владеет торговой маркой UNIX®, стандартом не является UNIX®, хотя он основан на существующем API-интерфейсе UNIX в то время. Первый стандарт POSIX.1 формально известен как IEEE std 1003.1-1988. [ 1 ] IEEE взимает значительную плату за получение копии стандарта.

Open Group выпустила единую спецификацию UNIX (SUSv2) в 1997 году на основе работы IEEE по стандарту POSIX. SUSv3 был выпущен в 2001 году совместной рабочей группой IEEE и The Open Group, известной как Austin Group. SUSv3 также известен как POSIX: 2001 [ 2 ]. Теперь есть также POSIX: 2004 и POSIX: 2008, которые являются ядром SUSv4. Что касается UNIX®, UNIX® - это то, что текущий зарегистрированный владелец торговой марки говорит, что это так. С 1994 года это открытая группа.

Novell приобрела бизнес систем UNIX® у AT & T/USL, где и родился UNIX®. В 1994 году они продали право на товарный знак UNIX® компании X/Open [], теперь известной как The Open Group. Затем они продали исходный код UNIX® SCO как UNIXWARE®. [] Сам UNIX® много раз разветвлялся [ 4 ] [ 5 ] частично из-за модели лицензирования AT & T. Закупка UNIX® предоставила вам полный исходный код операционной системы и полную цепочку инструментов для ее создания. Изменения в этом источнике могут распространяться и использоваться любым который владел лицензией на UNIX® от AT & T. Плата за лицензию исчислялась тысячами.

BSD был проектом в Беркли, который добавил ряд улучшений в операционную систему UNIX®. Код BSD был выпущен под гораздо более либеральной лицензией, чем исходный код AT & T, и для него не требовалась лицензионная плата или даже требование распространяться вместе с исходным кодом, в отличие от GPL, которую используют GNU Project и Linux). Это привело к тому, что значительная часть кода BSD была включена в различные коммерческие вилки UNIX. К моменту выпуска 4.3BSD они практически заменили любую потребность в исходном исходном коде AT & T UNIX®. FreeBSD/NetBSD/OpenBSD - это все форки 4.3BSD. которые представляют собой законченную операционную систему и не имеют исходного кода AT & T. Они также не имеют права на товарный знак UNIX®, но большая часть их кода используется коммерческими операционными системами UNIX. Socket API, используемый в UNIX, был разработан на BSD и код быстрой файловой системы Unix был заимствован и использован в различных операционных системах UNIX, таких как Solaris, со своими собственными усовершенствованиями.

Linux был разработан в 1991 году, но был разработан с нуля в отличие от BSD и использует существующий проект GNU, который представляет собой реализацию чистой комнаты большей части пользовательского пространства UNIX. Он реализует большую часть POSIX для совместимость и имеет UNIX-подобный дизайн, но не имеет тесной связи с AT & T или UNIX®, которую имеют BSD.

130
penguin359

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

  1. C API

    Отлично расширяет 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, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.

  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.

    PATHсемантика поиска указана , включая как косые черты предотвращают 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. Справочник struture

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

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

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

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

    Смотрите также: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Соглашения API утилиты командной строки

    Не обязательно, используется POSIX, но почти нигде, особенно в GNU. Но правда, это слишком ограничительно, например, только однобуквенные флаги (например, -a), без длинных версий с двумя дефисами (например, --all).

    Несколько широко используемых соглашений:

    • - Означает стандартный ввод файла, в котором ожидается файл
    • -- Закрывает флаги, например ls -- -l Для просмотра каталога с именем -l

    Смотрите также: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "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: https://stackoverflow.com/questions/27604455/is-Android-posix -Совместим

Бонусный уровень

Стандартная база Linux расширяет возможности POSIX.

Используйте некадровые индексы, они намного более читабельны и доступны для поиска: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Получить полную упакованную версию HTML-страниц для поиска: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

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

Идея состоит в том, что программу, написанную для одной POSIX-совместимой ОС, было бы проще перенести на другую POSIX-совместимую ОС, чем перенос между не POSIX-совместимыми ОС. Вот почему гораздо проще перенести приложение, скажем, с FreeBSD на Linux, чем с FreeBSD на Windows (хотя Windows якобы поддерживает подмножество POSIX).

16
Andrew Lambert

POSIX - это подмножество UNIX, которое предназначено для охвата различных Unix-подобных сред для других операционных систем; это изначально включало такие среды, как Eunice для VMS, POSIX-личность Windows NT и Apollo Domain/OS. Вы можете думать об этом как о стандартном API переносимости для подмножества сервисов операционной системы, поведение которых является общим для Unix и не-Unix. Смотрите http://standards.ieee.org/develop/wg/POSIX.html для получения дополнительной информации.

14
geekosaur