Ich sehe POSIX oft und überall erwähnt, und ich hatte angenommen, es sei der Grundstandard für UNIX. Bis ich auf einer Wikipedia-Seite den folgenden Auszug bemerkte: The Open Group
Die Open Group ist am bekanntesten als Zertifizierungsstelle für die Marke UNIX und deren Veröffentlichung des technischen Standards Single UNIX Specification , der die POSIX-Standards erweitert und die offizielle Definition eines UNIX-Systems darstellt .
Wenn die offizielle Definition eines UNIX-Systems eine Erweiterung von POSIX ist, was genau ist dann POSIX? ,,, Es scheint sicherlich ein Prüfstein der UNIX-Welt zu sein, aber ich weiß nicht, wie es in das Gesamtbild passt.
Antworten:
POSIX war 1988 erstmals ein Standard, lange vor der Single-UNIX-Spezifikation. Es war einer der Versuche, alle verschiedenen UNIX-Forks und UNIX-ähnlichen Systeme zu vereinheitlichen. POSIX ist ein IEEE-Standard, aber da das IEEE keine UNIX®-Marke besitzt, handelt es sich bei dem Standard nicht um UNIX®, obwohl er auf der zu diesem Zeitpunkt vorhandenen UNIX-API basiert. Der erste Standard POSIX.1 ist offiziell als IEEE std 1003.1-1988 bekannt. [ 1 ] IEEE hat eine erhebliche Gebühr erhoben, um eine Kopie des Standards zu erhalten.
Die Open Group veröffentlichte 1997 die Single UNIX Specification (SUSv2) auf der Grundlage der IEEE-Arbeit des POSIX-Standards. SUSv3 wurde 2001 von einer gemeinsamen Arbeitsgruppe von IEEE und The Open Group, der Austin Group, veröffentlicht. SUSv3 ist auch bekannt als POSIX: 2001 [ 2 ]. Es gibt jetzt auch POSIX: 2004 und POSIX: 2008, die den Kern von SUSv4 bilden. Was UNIX® anbelangt, so ist UNIX® das, was der derzeit eingetragene Markeninhaber angibt. Seit 1994 ist das The Open Group.
Novell erwarb das UNIX®-Systemgeschäft von AT & T / USL, wo UNIX® geboren wurde. 1994 verkauften sie das Recht an der Marke UNIX® an X / Open [ 3 ], das jetzt als The Open Group bekannt ist. Anschließend verkauften sie den UNIX®-Quellcode als UNIXWARE® an SCO. [ 3 ] UNIX® selbst hat sich unter anderem aufgrund des Lizenzmodells von AT & T mehrmals [ 4 ] [ 5 ] verzweigt . Mit dem Kauf von UNIX® haben Sie die vollständige Quelle des Betriebssystems und die gesamte Toolkette für dessen Erstellung erhalten. Änderungen an der Quelle können von jedem, der eine Lizenz für UNIX® von AT & T besitzt, verteilt und verwendet werden. Die Lizenzgebühr lag bei Tausenden.
BSD war ein Projekt in Berkeley, bei dem das UNIX®-Betriebssystem um eine Reihe von Verbesserungen erweitert wurde. BSD-Code wurde unter einer viel liberaleren Lizenz veröffentlicht als der von AT & T. Im Gegensatz zur GPL, die das GNU-Projekt und Linux verwenden, erforderten sie weder eine Lizenzgebühr noch eine Anforderung, um mit dem Quellcode verbreitet zu werden. Dies hat dazu geführt, dass ein Großteil des BSD-Codes in verschiedenen kommerziellen UNIX-Gabeln enthalten war. Gegen 4.3BSD hatten sie den ursprünglichen AT & T UNIX®-Quellcode fast vollständig ersetzt. FreeBSD / NetBSD / OpenBSD sind alle Forks von 4.3BSD, die ein vollständiges Betriebssystem darstellen und keinen der ursprünglichen AT & T-Quellcodes enthalten. Sie haben auch kein Recht auf die Marke UNIX®, aber ein Großteil ihres Codes wird von kommerziellen UNIX-Betriebssystemen verwendet.
Linux wurde 1991 entwickelt, wurde aber im Gegensatz zu BSD von Grund auf neu entwickelt und verwendet das vorhandene GNU-Projekt, das eine Reinraumimplementierung eines Großteils des UNIX-Benutzerraums darstellt. Es implementiert einen Großteil von POSIX aus Kompatibilitätsgründen und ist im Design UNIX-ähnlich, hat jedoch nicht die enge Verbindung zu AT & T oder UNIX®, die die BSDs haben.
quelle
Das Wichtigste, was POSIX 7 definiert
C API
Erweitert ANSI C in großem Maße mit Dingen wie:
mkdir
,dirname
,symlink
,readlink
,link
(Hardlinks)poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, Semaphorensem_*
, gemeinsam benutzter Speicher (shm_*
)kill
, Scheduling - Parameter (nice
,sched_*
),sleep
,mkfifo
,setpgid()
socket()
mmap
,mlock
,mprotect
,madvise
,brk()
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
oderEXIT_SUCCESS
für Erfolg,EXIT_FAILURE
für Misserfolg und lässt den Rest der Implementierung definiert.POSIX fügt hinzu:
126
: Befehl gefunden, aber nicht ausführbar.127
: Befehl nicht gefunden.> 128
: durch ein Signal beendet.POSIX scheint jedoch nicht die
128 + SIGNAL_ID
Regel anzugeben, die von Bash verwendet wird: Standard-Exit-Code, wenn der Prozess beendet wird?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 PfadtrennzeichenNUL
kann nicht verwendet werden.
istcwd
,..
Elternteila-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 zBls -- -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 mit
setxattr
.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
quelle
POSIX ist der Standard für tragbare Betriebssysteme. Es beschreibt bestimmte Dienstprogramme, APIs und Dienste, die ein kompatibles Betriebssystem für die Software bereitstellen muss (z. B. Sockets, Datei-E / A und Threading), sowie Konventionen, wie diese von einem Programm aus aufgerufen werden sollen.
Die Idee ist, dass ein Programm, das für ein POSIX-kompatibles Betriebssystem geschrieben wurde, leichter auf ein anderes POSIX-kompatibles Betriebssystem portiert werden kann als zwischen nicht POSIX-kompatiblen Betriebssystemen. Aus diesem Grund ist es viel einfacher, eine Anwendung von beispielsweise FreeBSD auf Linux zu portieren, als sie von FreeBSD auf Windows zu portieren (obwohl Windows angeblich eine Teilmenge von POSIX unterstützt).
quelle
POSIX ist eine Untergruppe von UNIX, die verschiedene Unix-ähnliche Umgebungen für andere Betriebssysteme abdecken soll. Dies umfasste ursprünglich Umgebungen wie Eunice für VMS, die POSIX-Persönlichkeit von Windows NT und Apollo Domain / OS. Sie können es sich als Standard-Portabilitäts-API für eine Teilmenge von Betriebssystemdiensten vorstellen, deren Verhalten Unix und Nicht-Unix gemeinsam hat. Weitere Informationen finden Sie unter http://standards.ieee.org/develop/wg/POSIX.html .
quelle