GNU/Linux >> Znalost Linux >  >> Linux

Co znamená POSIX?

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

  1. 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 , semafory sem_* , 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í.

  2. 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é.

  3. Jazyk shellu

    Např. a=b; echo "$a"

    Hlavní implementace linuxového desktopu:GNU Bash.

  4. 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í.

  5. Stav ukončení programu

    ANSI C říká 0 nebo EXIT_SUCCESS pro úspěch EXIT_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

  6. 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.

  7. Struktura adresářů

    Např.:/dev/null , /tmp

    Linux FHS značně rozšiřuje POSIX.

  8. Názvy souborů

    • / je oddělovač cest
    • NUL nelze použít
    • . je cwd , .. 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?

  9. 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?

  10. "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.


Linux
  1. Co je ekvivalentem Posix popen() v Win32 API?

  2. Jaký je význam fork() a grep v Linuxu?

  3. Co znamená „černá listina“ na GStreamer?

  1. Linux vs. Unix:Jaký je rozdíl?

  2. Co přesně je Posix?

  3. Jaký je význam curl -k -i -X ​​v Linuxu?

  1. Co se stalo s volným prostorem?

  2. Co znamená *nix?

  3. Jaký je rozdíl mezi vlákny NPTL a POSIX?