POSIX je rodina standardů, specifikovaných IEEE, aby objasnily a sjednotily rozhraní pro programování aplikací (a doplňkové problémy, jako jsou obslužné programy příkazového řádku) poskytované operačními systémy Unix-y. Když píšete své programy tak, aby se spoléhaly na standardy POSIX, můžete si být docela jisti, že je budete moci snadno přenést mezi velkou rodinu unixových derivátů (včetně Linuxu, ale nejen na něj!); pokud a když používáte nějaké linuxové API, které není standardizováno jako součást Posix, budete mít těžší problém, pokud a kdy budete chtít v budoucnu portovat tento program nebo knihovnu na jiné systémy Unix-y (např. MacOSX).
To nejdůležitější, co POSIX 7 definuje
-
C API
Výrazně rozšiřuje ANSI C o věci jako:
- další operace se soubory:
mkdir
,dirname
,symlink
,readlink
,link
(pevné odkazy),poll()
,stat
,sync
,nftw()
- proces a vlákna:
fork
,execl
,wait
,pipe
, semaforysem_*
, sdílená paměť (shm_*
),kill
, parametry plánování (nice
,sched_*
),sleep
,mkfifo
,setpgid()
- síť:
socket()
- správa paměti:
mmap
,mlock
,mprotect
,madvise
,brk()
- nástroje:regulární výrazy (
reg*
)
Tato rozhraní API také určují základní systémové koncepty, na kterých závisí, např.
fork
vyžaduje koncept procesu.Existuje mnoho systémových volání Linuxu pro implementaci specifické funkce POSIX C API a zajištění kompatibility Linuxu, např.
sys_write
,sys_read
, ... Mnoho z těchto systémových volání má však také rozšíření specifická pro Linux.Hlavní implementace linuxového desktopu:glibc, který v mnoha případech pouze poskytuje mělký obal pro systémová volání.
- další operace se soubory:
-
nástroje CLI
Např.:
cd
,ls
,echo
, ...Mnoho nástrojů je přímým rozhraním shellu pro odpovídající funkci C API, např.
mkdir
.Hlavní implementace Linuxu:GNU Coreutils pro malé, samostatné projekty GNU pro velké:
sed
,grep
,awk
, ... Některé nástroje CLI jsou implementovány Bash jako vestavěné. -
Jazyk shellu
Např.
a=b; echo "$a"
Hlavní implementace linuxového desktopu:GNU Bash.
-
Proměnné prostředí
Např.:
HOME
,PATH
.PATH
je specifikována sémantika vyhledávání, včetně toho, jak lomítka zabraňujíPATH
Vyhledávání. -
Stav ukončení programu
ANSI C říká
0
neboEXIT_SUCCESS
pro úspěchEXIT_FAILURE
pro selhání a ponechá ostatní implementaci definovanou.POSIX dodává:
-
126
:příkaz nalezen, ale nelze jej spustit. -
127
:příkaz nenalezen. -
> 128
:ukončeno signálem.Zdá se však, že POSIX nespecifikuje
128 + SIGNAL_ID
pravidlo používané Bash:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
-
-
Regulární výraz
Existují dva typy:BRE (Basic) a ERE (Extended). Základní je zastaralé a je zachováno pouze proto, aby nedošlo k porušení rozhraní API.
Ty jsou implementovány funkcemi C API a používají se v utilitách CLI, např.
grep
standardně přijímá BRE a ERE s-E
.Např.:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Hlavní implementace Linuxu:glibc implementuje funkce pod regex.h, které programy jako
grep
lze použít jako backend. -
Struktura adresářů
Např.:
/dev/null
,/tmp
Linux FHS značně rozšiřuje POSIX.
-
Názvy souborů
/
je oddělovač cestNUL
nelze použít.
jecwd
,..
rodič- přenosné názvy souborů
- pro celou cestu použijte maximálně 14 znaků a 256
- může obsahovat pouze:
a-zA-Z0-9._-
Viz také:co je soulad s posix pro souborový systém?
-
Konvence rozhraní API nástroje příkazového řádku
Není povinné, používá POSIX, ale téměř nikde jinde, zejména ne v GNU. Ale pravda, je příliš omezující, např. pouze jednopísmenné příznaky (např.
-a
), žádné dlouhé verze se dvěma pomlčkami (např.--all
).Několik široce používaných konvencí:
-
znamená stdin, kde se očekává soubor--
ukončuje příznaky, např.ls -- -l
vypíše adresář s názvem-l
Viz také:Existují standardy pro přepínače a argumenty příkazového řádku Linuxu?
-
"POSIX ACL" (Access Control Lists), např. jak se používá jako backend pro
setfacl
.Toto bylo staženo, ale bylo implementováno v několika OS, včetně Linuxu s
setxattr
.
Kdo vyhovuje POSIX?
Mnoho systémů přesně dodržuje POSIX, ale jen málo z nich je skutečně certifikováno Open Group, která udržuje standard. Mezi významné certifikované patří:
- OS X (Apple) X znamená 10 i UNIX. Byl prvním systémem Apple POSIX, vydaným přibližně v roce 2001. Viz také:Je OSX OS POSIX?
- AIX (IBM)
- HP-UX (HP)
- Solaris (Oracle)
Většina linuxových distribucí je velmi kompatibilní, ale nemají certifikaci, protože nechtějí platit kontrolu souladu. K-UX společnosti Inspur a EulerOS společnosti Huawei jsou dva certifikované příklady.
Oficiální seznam certifikovaných systémů naleznete na:https://www.opengroup.org/openbrand/register/ a také na stránce wiki.
Windows
Windows implementoval POSIX na některé ze svých profesionálních distribucí.
Protože se jednalo o volitelnou funkci, programátoři se na ni nemohli spolehnout u většiny aplikací pro koncové uživatele.
Podpora byla ve Windows 8 ukončena:
- Jak se aktuálně nachází implementace POSIX systému Microsoft Windows 7?
- https://superuser.com/questions/495360/does-windows-8-still-implement-posix
- Požadavek na funkci:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
V roce 2016 bylo oznámeno nové oficiální API podobné Linuxu s názvem „Windows Subsystem for Linux“. Zahrnuje systémová volání Linuxu, běh ELF, části /proc
souborový systém, Bash, GCC, (TODO pravděpodobně glibc?), apt-get
a další:https://channel9.msdn.com/Events/Build/2016/P488, takže věřím, že to umožní Windows spustit velkou část, ne-li všechny, POSIX. Je však zaměřen na vývojáře / nasazení namísto koncových uživatelů. Konkrétně se neplánovalo povolit přístup do grafického uživatelského rozhraní Windows.
Historický přehled oficiální kompatibility Microsoft POSIX:http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin je dobře známý GPL projekt třetí strany, který „poskytuje podstatnou funkčnost POSIX API“ pro Windows, ale vyžaduje, abyste „přestavěli vaši aplikaci ze zdroje, pokud chcete, aby běžela na Windows“. MSYS2 je příbuzný projekt, který, jak se zdá, přidává více funkcí nad Cygwin.
Android
Android má vlastní knihovnu C (Bionic), která od Androidu O plně nepodporuje POSIX:Je Android POSIX kompatibilní?
Úroveň bonusu
Linux Standard Base dále rozšiřuje POSIX.
Použijte indexy bez rámců, jsou mnohem čitelnější a lépe prohledávatelné:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Získejte plnou zazipovanou verzi HTML stránek pro grepping:Kde je seznam funkcí POSIX C API?
POSIX je:
POSIX (vyslovováno /ˈpɒzɪks/) nebo „Rozhraní přenosného operačního systému[pro Unix]“1 je název rodiny souvisejících standardů specifikovaných organizací IEEE k definování rozhraní pro programování aplikací (API) spolu s rozhraními shell a utilit pro software kompatibilní s variantami Unixu. operační systém, ačkoli standard lze použít pro jakýkoli operační systém.
V podstatě se jednalo o soubor opatření, která měla zmírnit bolest při vývoji a používání různých příchutí UNIXu tím, že mají (většinou) společné API a nástroje. Omezená shoda s POSIX se také rozšířila na různé verze Windows.