GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was bedeutet POSIX?

POSIX ist eine Familie von Standards, die vom IEEE spezifiziert wurden, um die von Unix-y-Betriebssystemen bereitgestellten Anwendungsprogrammierschnittstellen (und ergänzende Probleme, wie z. B. Befehlszeilen-Shell-Dienstprogramme) zu klären und zu vereinheitlichen. Wenn Sie Ihre Programme so schreiben, dass sie sich auf POSIX-Standards stützen, können Sie ziemlich sicher sein, dass Sie sie problemlos zwischen einer großen Familie von Unix-Derivaten (einschließlich Linux, aber nicht darauf beschränkt!) portieren können; Wenn Sie eine Linux-API verwenden, die nicht als Teil von Posix standardisiert ist, werden Sie es schwerer haben, wenn Sie dieses Programm oder diese Bibliothek in Zukunft auf andere Unix-y-Systeme (z. B. MacOSX) portieren möchten. P>

Die wichtigsten Dinge, die POSIX 7 definiert

  1. C-API

    Erweitert ANSI C mit Dingen wie:

    • weitere Dateioperationen:mkdir , dirname , symlink , readlink , link (Hardlinks), poll() , stat , sync , nftw()
    • Prozess und Threads:fork , execl , wait , pipe , Semaphoren sem_* , gemeinsamer Speicher (shm_* ), kill , Planungsparameter (nice , sched_* ), sleep , mkfifo , setpgid()
    • Netzwerk:socket()
    • Speicherverwaltung:mmap , mlock , mprotect , madvise , brk()
    • Dienstprogramme:Reguläre Ausdrücke (reg* )

    Diese APIs bestimmen auch zugrunde liegende Systemkonzepte, von denen sie abhängen, z. fork erfordert ein Prozesskonzept.

    Es gibt viele Linux-Systemaufrufe, um eine bestimmte POSIX-C-API-Funktion zu implementieren und Linux-kompatibel zu machen, z. sys_write , sys_read , ... Viele dieser Systemaufrufe haben jedoch auch Linux-spezifische Erweiterungen.

    Wichtige Linux-Desktop-Implementierung:glibc, die in vielen Fällen nur einen flachen Wrapper für Systemaufrufe bereitstellt.

  2. CLI-Dienstprogramme

    Beispiel:cd , ls , echo , ...

    Viele Dienstprogramme sind direkte Shell-Frontends für eine entsprechende C-API-Funktion, z. mkdir .

    Größere Linux-Desktop-Implementierung:GNU Coreutils für die Kleinen, separate GNU-Projekte für die Großen:sed , grep , awk , ... Einige CLI-Dienstprogramme werden von Bash als eingebaute Funktionen implementiert.

  3. Shell-Sprache

    Beispiel:a=b; echo "$a"

    Wichtige Linux-Desktop-Implementierung:GNU Bash.

  4. Umgebungsvariablen

    Beispiel:HOME , PATH .

    PATH Suchsemantik wird spezifiziert, einschließlich wie Schrägstriche PATH verhindern Suche.

  5. Programmbeendigungsstatus

    ANSI C sagt 0 oder EXIT_SUCCESS für Erfolg, EXIT_FAILURE für Fehler und lässt die restliche Implementierung definiert.

    POSIX fügt hinzu:

    • 126 :Befehl gefunden, aber nicht ausführbar.

    • 127 :Befehl nicht gefunden.

    • > 128 :durch ein Signal beendet.

      Aber POSIX scheint den 128 + SIGNAL_ID nicht anzugeben von Bash verwendete Regel:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated

  6. Regulärer Ausdruck

    Es gibt zwei Typen:BRE (Basic) und ERE (Extended). Basic ist veraltet und wird nur beibehalten, um APIs nicht zu beschädigen.

    Diese werden von C-API-Funktionen implementiert und in allen CLI-Dienstprogrammen verwendet, z. grep akzeptiert standardmäßig BREs und EREs mit -E .

    Beispiel:echo 'a.1' | grep -E 'a.[[:digit:]]'

    Größere Linux-Implementierung:glibc implementiert die Funktionen unter regex.h, die Programme wie grep enthalten als Backend verwenden kann.

  7. Verzeichnisstruktur

    Beispiel:/dev/null , /tmp

    Das Linux FHS erweitert POSIX erheblich.

  8. Dateinamen

    • / ist das Pfadtrennzeichen
    • NUL kann nicht verwendet werden
    • . ist cwd , .. Elternteil
    • Portable Dateinamen
      • verwenden Sie maximal 14 Zeichen und 256 für den vollständigen Pfad
      • darf nur enthalten:a-zA-Z0-9._-

    Siehe auch:Was ist Posix-Compliance für Dateisysteme?

  9. API-Konventionen für Befehlszeilenprogramme

    Nicht obligatorisch, wird von POSIX verwendet, aber fast nirgendwo sonst, insbesondere nicht in GNU. Aber es stimmt, es ist zu restriktiv, z. Nur Einzelbuchstaben-Flags (z. B. -a ), keine langen Versionen mit doppeltem Bindestrich (z. B. --all ).

    Einige weit verbreitete Konventionen:

    • - bedeutet stdin wo eine Datei erwartet wird
    • -- beendet Flags, z.B. ls -- -l um ein Verzeichnis namens -l aufzulisten

    Siehe auch:Gibt es Standards für Linux-Befehlszeilenschalter und -argumente?

  10. "POSIX ACLs" (Access Control Lists), z.B. wie es als Backend für setfacl verwendet wird .

    Dies wurde zurückgezogen, aber in mehreren Betriebssystemen implementiert, darunter in Linux mit setxattr .

Wer ist POSIX-konform?

Viele Systeme folgen POSIX eng, aber nur wenige sind tatsächlich von der Open Group zertifiziert, die den Standard aufrechterhält. Zu den bemerkenswerten zertifizierten gehören:

  • OS X (Apple) X steht sowohl für 10 als auch für UNIX. War das erste Apple POSIX-System, veröffentlicht um 2001. Siehe auch:Ist OSX ein POSIX-Betriebssystem?
  • AIX (IBM)
  • HP-UX (HP)
  • Solaris (Oracle)

Die meisten Linux-Distributionen sind sehr konform, aber nicht zertifiziert, weil sie die Konformitätsprüfung nicht bezahlen wollen. K-UX von Inspur und EulerOS von Huawei sind zwei zertifizierte Beispiele.

Die offizielle Liste der zertifizierten Systeme finden Sie unter:https://www.opengroup.org/openbrand/register/ und auch auf der Wiki-Seite.

Windows

Windows hat POSIX in einigen seiner professionellen Distributionen implementiert.

Da es sich um eine optionale Funktion handelte, konnten sich Programmierer bei den meisten Endbenutzeranwendungen nicht darauf verlassen.

Die Unterstützung wurde in Windows 8 eingestellt:

  • Wo steht die POSIX-Implementierung von Microsoft Windows 7 derzeit?
  • https://superuser.com/questions/495360/does-windows-8-still-implement-posix
  • Funktionsanfrage:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support

2016 wurde eine neue offizielle Linux-ähnliche API namens „Windows Subsystem for Linux“ angekündigt. Es enthält Linux-Systemaufrufe, ELF-Lauf, Teile des /proc Dateisystem, Bash, GCC, (TODO wahrscheinlich glibc?), apt-get und mehr:https://channel9.msdn.com/Events/Build/2016/P488, also glaube ich, dass es Windows ermöglichen wird, viel, wenn nicht alles, von POSIX auszuführen. Es konzentriert sich jedoch auf Entwickler / Bereitstellung und nicht auf Endbenutzer. Insbesondere war nicht geplant, den Zugriff auf die Windows-GUI zu ermöglichen.

Historischer Überblick über die offizielle Microsoft POSIX-Kompatibilität:http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin ist ein bekanntes GPL-Drittanbieterprojekt, das „erhebliche POSIX-API-Funktionalität“ für Windows bereitstellt, aber erfordert, dass Sie „Ihre Anwendung aus dem Quellcode neu erstellen, wenn Sie möchten, dass sie unter Windows ausgeführt wird“. MSYS2 ist ein verwandtes Projekt, das Cygwin um weitere Funktionen erweitert.

Android

Android hat eine eigene C-Bibliothek (Bionic), die POSIX ab Android O nicht vollständig unterstützt:Ist Android POSIX-kompatibel?

Bonuslevel

Die Linux Standard Base erweitert POSIX weiter.

Verwenden Sie die Indexe ohne Frames, sie sind viel besser lesbar und durchsuchbar:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Holen Sie sich eine gezippte Vollversion der HTML-Seiten zum Grepping:Wo ist die Liste der POSIX-C-API-Funktionen?


POSIX ist:

POSIX (ausgesprochen /ˈpɒzɪks/) oder „Portable Operating System Interface[for Unix]“1 ist der Name einer Familie verwandter Standards, die von der IEEE festgelegt wurden, um die Anwendungsprogrammierschnittstelle (API) zusammen mit Shell- und Dienstprogrammschnittstellen für Software zu definieren, die mit Varianten von Unix kompatibel ist Betriebssystem, obwohl der Standard für jedes Betriebssystem gelten kann.

Im Grunde war es eine Reihe von Maßnahmen, um den Schmerz der Entwicklung und Verwendung verschiedener UNIX-Varianten zu lindern, indem eine (meistens) gemeinsame API und Dienstprogramme vorhanden waren. Die eingeschränkte POSIX-Konformität erstreckte sich auch auf verschiedene Windows-Versionen.


Linux
  1. Linux vs. Unix:Was ist der Unterschied?

  2. Was ist mit dem freien Speicherplatz passiert?

  3. Was bedeuten fork() und grep unter Linux?

  4. Was bedeutet „auf der schwarzen Liste“ bei GStreamer?

  5. Was bedeutet curl -k -i -X ​​unter Linux?

Was ist die Shell unter Linux?

iptables vs. nftables:Was ist der Unterschied?

Was ist der Kill-Befehl in Linux?

Was ist die Logjam-Schwachstelle?

Was bedeutet 1 am Ende des awk-Skripts?

Was ist der Goldlinker?