Найважливіші речі, які 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