Das Wichtigste, was POSIX 7 definiert
C API
Erweitert ANSI C in großem Maße mit Dingen wie:
- mehr Dateioperationen:
mkdir
, dirname
, symlink
, readlink
, link
(Hardlinks) poll()
, stat
, sync
,nftw()
- Prozess und Threads:
fork
, execl
, wait
, pipe
, Semaphoren sem_*
, gemeinsam benutzter 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 zugrunde liegende Systemkonzepte, von denen sie abhängen, z. B. fork
ein Prozesskonzept.
Viele Linux - Systemaufrufe existieren eine bestimmte POSIX - C - API - Funktion zu implementieren und Linux - konform machen, zum Beispiel sys_write
, sys_read
... Viele dieser syscalls haben auch Linux-spezifische Erweiterungen jedoch.
Hauptimplementierung des Linux-Desktops: 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 von Bash implementiert werden als Einbauten .
Shell-Sprache
Z.B, a=b; echo "$a"
Wichtige Linux-Desktop-Implementierung: GNU Bash .
Umgebungsvariablen
Zum Beispiel: HOME
, PATH
.
PATH
Die Suchsemantik wird angegeben , einschließlich der Art und WeisePATH
, wie Schrägstriche die Suche verhindern .
Programm beenden Status
ANSI C sagt 0
oder EXIT_SUCCESS
für Erfolg, EXIT_FAILURE
für Misserfolg und lässt den Rest der Implementierung definiert.
POSIX fügt hinzu:
Regulären Ausdruck
Es gibt zwei Arten: 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:]]'
Hauptimplementierung von Linux: glibc implementiert die Funktionen unter regex.h, die Programme wie dieses grep
als Backend verwenden können.
Verzeichnisstruktur
Zum Beispiel: /dev/null
,/tmp
Das Linux FHS erweitert POSIX erheblich.
Dateinamen
/
ist das Pfadtrennzeichen
NUL
kann nicht verwendet werden
.
ist cwd
, ..
Elternteil
- tragbare Dateinamen
- Verwenden Sie maximal 14 Zeichen und 256 Zeichen für den vollständigen Pfad
- kann nur enthalten:
a-zA-Z0-9._-
Siehe auch: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
API-Konventionen für Befehlszeilendienstprogramme
Nicht obligatorisch, von POSIX verwendet, aber fast nirgendwo anders, insbesondere nicht in GNU. Es ist jedoch zu restriktiv, z. B. nur Kennzeichen für einzelne Buchstaben (z. B. -a
), keine langen Versionen mit doppeltem Bindestrich (z --all
. B. ).
Einige weit verbreitete Konventionen:
-
bedeutet stdin, wo eine Datei erwartet wird
--
Beendet Flags, um zB ls -- -l
ein Verzeichnis mit dem Namen aufzulisten-l
Siehe auch: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"POSIX ACLs" (Access Control Lists), zB als Backend für setfacl
.
Dies wurde zurückgezogen, aber es wurde in mehreren Betriebssystemen implementiert, darunter 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:
Die meisten Linux-Distributionen sind sehr konform, aber nicht zertifiziert, da sie die Konformitätsprüfung nicht bezahlen möchten. Inspur's K-UX und Huawei's EulerOS 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 auf einigen seiner professionellen Distributionen implementiert.
Da es sich um eine optionale Funktion handelte, konnten sich Programmierer bei den meisten Endbenutzeranwendungen nicht darauf verlassen.
Unterstützung wurde in Windows 8 veraltet:
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
Dateisystems, Bash, GCC, (TODO glibc wahrscheinlich?), apt-get
Und mehr: https://channel9.msdn.com/Events/Build/2016/P488 so glaube ich, dass es ermöglicht Windows die Ausführung vieler, wenn nicht aller POSIX-Anwendungen. Es konzentriert sich jedoch auf Entwickler / Bereitstellung anstelle von Endbenutzern. Insbesondere war nicht geplant, den Zugriff auf die Windows-GUI 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-Projekt von Drittanbietern, das "umfangreiche POSIX-API-Funktionen" 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 neben Cygwin weitere Funktionen zu bieten scheint.
Android
Android verfügt über eine eigene C-Bibliothek (Bionic), die POSIX ab Android O nicht vollständig unterstützt: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Bonuslevel
Die Linux Standard Base erweitert POSIX weiter.
Verwenden Sie die Nicht-Frames-Indizes. Sie sind viel lesbarer und durchsuchbarer: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Holen Sie sich eine vollständig komprimierte Version der HTML-Seiten zum Greifen: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939