Найважливіші речі, які 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...
Багато утиліт - це прямі передні оболонки оболонки для відповідної функції API 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 (Basic) та ERE (Extended). Basic є застарілим і зберігається лише для того, щоб не порушувати API.
Вони реалізовані за допомогою функцій API API та використовуються у всіх утилітах CLI, наприклад, grepприймає BRE за замовчуванням та ERE з -E.
Наприклад: echo 'a.1' | grep -E 'a.[[:digit:]]'
Основна реалізація Linux: glibc реалізує функції під regex.h, такі програми, як, наприклад, grepможуть використовувати як бекенд.
Структура каталогів
Наприклад: /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 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 та EulerOS компанії Huawei два сертифікованих прикладу.
Офіційний список сертифікованих систем можна знайти за посиланням: https://www.opengroup.org/openbrand/register/, а також на сторінці wiki .
Windows
Windows впровадила POSIX у деяких своїх професійних дистрибутивах.
Оскільки це була додаткова функція, програмісти не могли розраховувати на неї для більшості програм кінцевих користувачів.
У Windows 8 підтримка застаріла:
У 2016 році було оголошено про новий офіційний Linux-подібний API під назвою "Підсистема Windows для 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