Самые важные вещи, которые определяет POSIX 7
C API
Значительно расширяет 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 существуют для реализации конкретной функции 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 добавляет:
Регулярное выражение
Существует два типа: 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
, ..
родитель
- переносимые имена файлов
- используйте максимум 14 символов и 256 для полного пути
- может содержать только:
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