Самые важные вещи, которые определяет 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