Die wichtigsten Dinge, die POSIX 7 definiert
C API
Erweitert ANSI C erheblich um Dinge wie:
- mehr Dateioperationen:
mkdir
, dirname
, symlink
, readlink
, link
(Hardlinks) poll()
, stat
, sync
,nftw()
- verarbeiten und Themen:
fork
, execl
, wait
, pipe
, Semaphoren sem_*
, gemeinsam benutzten Speicher ( shm_*
) kill
, Scheduling - Parameter ( 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
erfordern sie ein Konzept eines Prozesses.
Viele Linux - Systemaufrufe existieren eine bestimmte POSIX - C - API - Funktion zu implementieren und Linux - konform zu machen, zum Beispiel sys_write
, sys_read
... Viele dieser syscalls aber auch Linux-spezifische Erweiterungen.
Wichtige Linux-Desktop-Implementierung: glibc, das in vielen Fällen nur einen flachen Wrapper für Systemaufrufe bereitstellt.
CLI-Dienstprogramme
Zum Beispiel: cd
, ls
, echo
, ...
Viele Dienstprogramme sind direkte Shell-Frontends für eine entsprechende C-API-Funktion, z mkdir
.
Wichtige Linux - Desktop - Implementierung: GNU Coreutils für die kleinen, separaten GNU - Projekte für die Großen: sed
, grep
, awk
, ... Einige CLI - Dienstprogramme werden von Bash implementiert als Einbauten .
Shell-Sprache
Z.B, a=b; echo "$a"
Wichtige Linux-Desktop-Implementierung: GNU Bash .
Umgebungsvariablen
ZB: HOME
, PATH
.
PATH
Suchsemantik wird angegeben , einschließlich der Art und WeisePATH
, wie Schrägstriche die Suche verhindern .
Programm-Exit-Status
ANSI C sagt 0
oder EXIT_SUCCESS
für Erfolg, EXIT_FAILURE
für Misserfolg und lässt die restliche Implementierung definiert.
POSIX fügt hinzu:
Regulären 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. B. grep
akzeptiert standardmäßig BREs und EREs mit -E
.
Z.B: echo 'a.1' | grep -E 'a.[[:digit:]]'
Wichtige Linux-Implementierung: glibc implementiert die Funktionen unter regex.h, die Programme wie grep
Backend verwenden können.
Verzeichnisaufbau
ZB : /dev/null
,/tmp
Das Linux FHS erweitert POSIX erheblich.
Dateinamen
/
ist das Pfadtrennzeichen
NUL
kann nicht benutzt werden
.
ist cwd
, ..
Elternteil
- tragbare Dateinamen
- Verwenden Sie höchstens 14 Zeichen und 256 Zeichen für den vollständigen Pfad
- kann nur enthalten:
a-zA-Z0-9._-
Siehe auch: Was ist die Posix-Konformität für das Dateisystem?
API-Konventionen für Befehlszeilenprogramme
Nicht obligatorisch, wird von POSIX verwendet, aber fast nirgendwo anders, insbesondere nicht in GNU. Aber wahr, es ist zu restriktiv, zB nur Einzelbuchstaben-Flags (zB -a
), keine langen Versionen mit doppeltem Bindestrich (zB --all
).
Einige weit verbreitete Konventionen:
-
bedeutet stdin, wo eine Datei erwartet wird
--
Beendet Flags, z. B. ls -- -l
um ein Verzeichnis mit dem Namen aufzulisten-l
Siehe auch: Gibt es Standards für Linux-Befehlszeilenoptionen und -argumente?
"POSIX ACLs" (Zugriffssteuerungslisten), z. B. als Backend für setfacl
.
Dies wurde zurückgezogen, aber es wurde in mehreren Betriebssystemen implementiert, einschließlich in Linux mitsetxattr
.
Wer entspricht POSIX?
Viele Systeme folgen POSIX genau, aber nur wenige sind tatsächlich von der Open Group zertifiziert, die den Standard beibehält. Bemerkenswerte zertifizierte sind:
- OS X (Apple) X steht sowohl für 10 als auch für UNIX. War das erste Apple POSIX-System, das um 2001 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, da sie den Konformitätsscheck nicht bezahlen möchten. Das K-UX von Inspur und das EulerOS von Huawei sind zwei zertifizierte Beispiele.
Die offizielle Liste der zertifizierten Systeme finden Sie unter: https://www.opengroup.org/openbrand/register/ sowie auf der Wiki-Seite .
Windows
Windows hat POSIX auf 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 in Windows 8 war veraltet:
2016 wurde eine neue offizielle Linux-ähnliche API namens "Windows Subsystem for Linux" angekündigt. Es enthält Linux-Systemaufrufe, ELF-Ausführung, Teile des /proc
Dateisystems, Bash, GCC (TODO wahrscheinlich glibc?) apt-get
Und mehr: https://channel9.msdn.com/Events/Build/2016/P488, also glaube ich, dass es so ist ermöglicht es Windows, viel, wenn nicht alles von POSIX auszuführen. Es konzentriert sich jedoch auf Entwickler / Bereitstellung anstelle von Endbenutzern. Insbesondere war nicht geplant, den Zugriff auf die Windows-Benutzeroberfläche zuzulassen.
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 für Windows, das "umfangreiche POSIX-API-Funktionen bietet", jedoch 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 neben Cygwin anscheinend mehr Funktionen bietet .
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 Nicht-Frames-Indizes. Sie sind viel besser lesbar und durchsuchbar: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Holen Sie sich eine komprimierte Vollversion der HTML-Seiten zum Greppen: Wo ist die Liste der POSIX C-API-Funktionen?