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?
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?
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.
Die wichtigsten Dinge POSIX 7 definiert
Großartig erweitert ANSI C mit Dingen wie:
mkdir
, dirname
, symlink
, readlink
, link
(Hardlinks), poll()
, stat
, sync
, nftw()
fork
, execl
, wait
, pipe
Semaphern sem_*
, gemeinsamer Speicher ( shm_*
), kill
, Terminierungsparameter ( nice
, sched_*
), sleep
, mkfifo
, setpgid()
socket()
mmap
, mlock
, mprotect
, madvise
, brk()
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.
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 .
Z.B., a=b; echo "$a"
Große Linux-Desktop-Implementierung: GNU Bash .
Z.B.: HOME
, PATH
.
PATH
Such-Semantiken sind spezifiziert , einschließlich wie Schrägstriche verhindern PATH
Suche .
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:
126
: Befehl gefunden, aber nicht ausführbar.
127
: Befehl nicht gefunden.
> 128
: Beendet durch ein Signal.
Aber POSIX scheint nicht zu spezifizieren, welche 128 + SIGNAL_ID
Regel, die von der Bash verwendet wird: https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
Siehe auch: Was ist die Bedeutung von $?
(Dollar-Fragezeichen) in Shell-Skripten?
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.
Z.B.: /dev/null
, /tmp
Das Linux FHS erweitert POSIX erheblich.
/
ist der PfadseparatorNUL
kann nicht verwendet werden.
ist cwd
, ..
Elternteila-zA-Z0-9._-
Siehe auch: Was bedeutet Posix-Konformität für das Dateisystem?
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?
"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:
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?
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.
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.
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.