1089 Stimmen

Was bedeutet der Begriff "POSIX"?

Was ist POSIX? Ich habe die Wikipedia-Artikel und ich lese ihn jedes Mal, wenn mir der Begriff begegnet. Tatsache ist, dass ich nie wirklich verstanden habe, was es ist.

Kann mir bitte jemand die Notwendigkeit von POSIX" erklären?

754voto

Alex Martelli Punkte 805329

POSIX ist eine Familie von Normen, die durch die IEEE um die von den Unix-Betriebssystemen bereitgestellten Anwendungsprogrammierschnittstellen (und Nebenaspekte wie Befehlszeilen-Shell-Utilities) 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 auf eine große Familie von Unix-Derivaten portieren können (einschließlich Linux, aber nicht darauf beschränkt!); 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-Systeme (z. B. MacOSX) portieren wollen.

693voto

Die wichtigsten Dinge POSIX 7 definiert

  1. C API

    Großartig 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 Semaphern sem_* , gemeinsamer Speicher ( shm_* ), kill , Terminierungsparameter ( nice , sched_* ), sleep , mkfifo , setpgid()
    • Vernetzung: socket()
    • Speicherverwaltung: mmap , mlock , mprotect , madvise , brk()
    • Dienstprogramme: reguläre Ausdrücke ( reg* )

    Diese APIs bestimmen auch die zugrunde liegenden Systemkonzepte, von denen sie abhängen, z. B. fork erfordert ein Konzept für einen Prozess.

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

    Wichtigste Linux-Desktop-Implementierung: glibc, die in vielen Fällen nur einen oberflächlichen Wrapper für Systemaufrufe bietet.

  2. CLI-Dienstprogramme

    Z.B.: cd , ls , echo , ...

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

    Wichtige 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 der Bash implementiert als Einbauten .

  3. Shell-Sprache

    Z.B., a=b; echo "$a"

    Große Linux-Desktop-Implementierung: GNU Bash .

  4. Umgebungsvariablen

    Z.B.: HOME , PATH .

    PATH Such-Semantiken sind spezifiziert , einschließlich wie Schrägstriche verhindern PATH Suche .

  5. Status des Programmendes

    ANSI C sagt 0 o EXIT_SUCCESS für den Erfolg, EXIT_FAILURE für den Fall des Scheiterns und überlässt die restliche Implementierung der Definition.

    POSIX fügt hinzu:

    Siehe auch: Was ist die Bedeutung von $? (Dollar-Fragezeichen) in Shell-Skripten?

  6. Regulärer Ausdruck

    Es gibt zwei Arten: BRE (Basic) und ERE (Extended). Basic ist veraltet und wird nur beibehalten, um APIs nicht zu zerstören.

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

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

    Wichtigste Linux-Implementierung: glibc implementiert die Funktionen unter regex.h welche Programme wie grep als Backend verwenden können.

  7. Struktur des Verzeichnisses

    Z.B.: /dev/null , /tmp

    Das Linux FHS erweitert POSIX erheblich.

  8. Dateinamen

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

    Siehe auch: Was bedeutet Posix-Konformität für das Dateisystem?

  9. API-Konventionen für Befehlszeilendienstprogramme

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

    Ein paar weit verbreitete Konventionen:

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

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

  10. "POSIX ACLs" (Access Control Lists), die z.B. als Backend für setfacl .

    Diese wurde zurückgezogen aber es wurde in mehreren Betriebssystemen implementiert, darunter unter Linux mit setxattr .

Wer hält sich an POSIX?

Viele Systeme orientieren sich eng an POSIX, aber nur wenige sind tatsächlich von der Open Group, die den Standard pflegt, zertifiziert. Bemerkenswerte zertifizierte Systeme sind:

  • OS X (Apple) X steht sowohl für 10 als auch für UNIX. War das erste POSIX-System von Apple, das um 2001 herum veröffentlicht wurde. 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 y EulerOS von Huawei sind zwei zertifizierte Beispiele.

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

Windows

Windows implementierte POSIX in einige seiner professionellen Distributionen.

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 veraltet:

2016 wurde eine neue offizielle Linux-ähnliche API namens "Windows Subsystem for Linux" angekündigt. Sie umfasst Linux-Systemaufrufe, ELF-Ausführung, Teile der /proc Dateisystem, Bash, GCC, (TODO wahrscheinlich glibc?), apt-get und mehr: https://channel9.msdn.com/Events/Build/2016/P488 Daher glaube ich, dass es Windows erlauben wird, einen Großteil, wenn nicht sogar alles, von POSIX auszuführen. Der Schwerpunkt liegt jedoch auf Entwicklern/Einsatz und nicht auf Endbenutzern. Insbesondere gab es keine Pläne, 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-Projekt eines Drittanbieters, das "umfangreiche POSIX-API-Funktionen" für Windows bereitstellt, aber erfordert, dass Sie "Ihre Anwendung aus dem Quellcode neu erstellen, wenn Sie sie unter Windows ausführen möchten". MSYS2 ist ein verwandtes Projekt, das anscheinend mehr Funktionalität zu Cygwin hinzufügt.

Wenn das Einzige, was Sie von POSIX benötigen, die Kommandozeilen-Dienstprogramme sind, sollten Sie dies ebenfalls in Betracht ziehen: https://github.com/shelljs/shelljs das eine Reihe von CLI-Dienstprogrammen in Node.js neu implementiert, die im Wesentlichen bereits eine Portabilitätsschicht für die einfacheren Systemaufrufe wie mkdir usw. Viele Menschen nutzen dieses Projekt im package.json ihres Projekts, um die Ausführung des Projekts auch unter Windows zu ermöglichen. Natürlich müssen die Benutzer die Node.js-Laufzeitumgebung installieren, aber angesichts der Popularität von Node.js erwarte ich nicht, dass das in absehbarer Zeit nicht mehr möglich sein wird oder schwer zu erfüllen ist.

Android

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

Bonuslevel

El Linux Standard Basis erweitert POSIX weiter.

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

Sie erhalten eine vollständige gezippte Version der HTML-Seiten zum Abrufen: Wo ist die Liste der POSIX C API-Funktionen?

82voto

cletus Punkte 596503

POSIX ist:

POSIX (ausgesprochen: /pzks/) oder "Portable Operating System Interface [für Unix]" 1 ist der Name einer Familie von verwandten Standards, die von der IEEE spezifiziert wurde, um die Anwendungs Programmierschnittstelle (API), zusammen mit sowie Shell- und Dienstprogramm-Schnittstellen für Software, die mit Varianten kompatibel ist des Unix-Betriebssystems, obwohl der Standard für jedes beliebige Betriebssystem gelten kann.

Im Grunde war es eine Reihe von Maßnahmen, um die Entwicklung und Nutzung verschiedener UNIX-Varianten durch eine (größtenteils) gemeinsame API und Dienstprogramme zu erleichtern. Die begrenzte POSIX-Konformität wurde auch auf verschiedene Windows-Versionen ausgedehnt.

54voto

Jim Dennis Punkte 16336

Lassen Sie mich die unhöfliche "inoffizielle" Erklärung geben.

POSIX ist eine Reihe von Standards, mit denen versucht wird, "UNIX" und UNIX-ähnliche Systeme von solchen zu unterscheiden, die nicht mit ihnen kompatibel sind. Er wurde von der US-Regierung zu Beschaffungszwecken geschaffen. Die Idee war, dass die US-Bundesbeschaffungsbehörden eine Möglichkeit brauchten, die Anforderungen für verschiedene Arten von Angeboten und Verträgen auf eine Art und Weise zu spezifizieren, die verwendet werden konnte, um Systeme auszuschließen, auf die eine bestimmte vorhandene Codebasis oder ein bestimmtes Programmierpersonal NICHT übertragbar war.

Da POSIX post facto geschrieben wurde ... um eine lose ähnliche Reihe von konkurrierenden Systemen zu beschreiben ... wurde es NICHT so geschrieben, dass es implementiert werden konnte.

So wurde z.B. Microsofts NT so POSIX-konform geschrieben, dass es sich für einige Ausschreibungen qualifizierte ... obwohl das POSIX-Subsystem im Hinblick auf die praktische Portabilität und Kompatibilität mit UNIX-Systemen im Grunde nutzlos war.

Im Laufe der Jahrzehnte wurden verschiedene andere Standards für UNIX geschrieben. Dinge wie die SPEC1170 (spezifizierte elfhundertsiebzig Funktionsaufrufe, die kompatibel implementiert werden mussten) und verschiedene Inkarnationen der SUS (Single UNIX Specification).

In den meisten Fällen sind diese "Normen" für eine praktische technische Anwendung ungeeignet. Sie dienen hauptsächlich der Argumentation, dem juristischen Gerangel und anderen dysfunktionalen Gründen.

34voto

Hank Gay Punkte 67607

POSIX ist ein Standard für Betriebssysteme, der es einfacher machen sollte, plattformübergreifende Software zu schreiben. In der Welt von Unix ist er besonders wichtig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X