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
-
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
, Semaphorensem_*
, 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.
- weitere Dateioperationen:
-
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. -
Shell-Sprache
Beispiel:
a=b; echo "$a"
Wichtige Linux-Desktop-Implementierung:GNU Bash.
-
Umgebungsvariablen
Beispiel:
HOME
,PATH
.PATH
Suchsemantik wird spezifiziert, einschließlich wie SchrägstrichePATH
verhindern Suche. -
Programmbeendigungsstatus
ANSI C sagt
0
oderEXIT_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
-
-
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. -
Verzeichnisstruktur
Beispiel:
/dev/null
,/tmp
Das Linux FHS erweitert POSIX erheblich.
-
Dateinamen
/
ist das PfadtrennzeichenNUL
kann nicht verwendet werden.
istcwd
,..
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?
-
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?
-
"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.