Я вижу, что POSIX упоминается часто и повсеместно, и я предполагал, что он является базовым стандартом UNIX ... пока не заметил следующую выдержку на странице Википедии: Открытая группа
Open Group наиболее известна как орган по сертификации товарного знака UNIX и публикации технического стандарта Single UNIX Specification , который расширяет стандарты POSIX и является официальным определением системы UNIX .
Если официальное определение системы UNIX является расширением POSIX, то что такое POSIX? Это, безусловно, является пробным камнем в мире UNIX, но я не знаю, как это вписывается в общую картину.
Ответы:
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 [ 3 ], теперь известной как The Open Group. Затем они продали исходный код UNIX® в SCO как UNIXWARE®. [ 3 ] Сам 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.
Linux был разработан в 1991 году, но был разработан с нуля в отличие от BSD и использует существующий проект GNU, который представляет собой реализацию чистой комнаты большей части пространства пользователя UNIX. Он реализует большую часть POSIX для совместимости и имеет UNIX-подобный дизайн, но у него нет тесной связи с AT & T или UNIX®, которую имеют BSD.
источник
Самые важные вещи, которые определяет POSIX 7
C API
Значительно расширяет ANSI C такими вещами, как:
mkdir
,dirname
,symlink
,readlink
,link
() жесткие ссылки,poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, semaphorssem_*
, совместно используемой памяти (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, которая во многих случаях просто обеспечивает поверхностную оболочку для системных вызовов.
Утилиты CLI
Например:
cd
,ls
,echo
...Многие утилиты являются прямыми оболочками для соответствующей функции C API, например
mkdir
.Реализация Major Linux Desktop: 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: код завершения по умолчанию, когда процесс завершается?Регулярное выражение
Существует два типа: BRE (базовый) и ERE (расширенный). Basic устарел и поддерживается только для того, чтобы не нарушать API.
Они реализуются функциями API C и используются в утилитах CLI, например,
grep
принимают BRE по умолчанию и ERE с-E
.Например:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Основная реализация Linux: glibc реализует функции в regex.h, которые подобные программы
grep
могут использовать в качестве бэкэнда.Справочник struture
Например:
/dev/null
,/tmp
Linux FHS значительно расширяет POSIX.
Имена файлов
/
является разделителем путиNUL
не может быть использован.
этоcwd
,..
родительa-zA-Z0-9._-
Смотрите также: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
Соглашения API утилиты командной строки
Не обязательно, используется POSIX, но почти нигде, особенно в GNU. Но правда, это слишком ограничительно, например, только однобуквенные флаги (например
-a
), нет длинных версий с двойным дефисом (например--all
).Несколько широко используемых соглашений:
-
означает STDIN, где файл ожидается--
завершает флаги, например,ls -- -l
для отображения каталога с именем-l
Смотрите также: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
«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: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Бонусный уровень
Standard Base 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.)
источник
POSIX - это подмножество UNIX, которое предназначено для охвата различных Unix-подобных сред для других операционных систем; это изначально включало такие среды, как Eunice для VMS, POSIX-личность Windows NT и Apollo Domain / OS. Вы можете думать об этом как о стандартном API переносимости для подмножества сервисов операционной системы, поведение которых является общим для Unix и не-Unix. См. Http://standards.ieee.org/develop/wg/POSIX.html для получения дополнительной информации.
источник