Was ist POSIX? Ich habe den Wikipedia-Artikel gelesen und lese ihn jedes Mal, wenn ich auf den Begriff stoße. Tatsache ist, dass ich nie wirklich verstanden habe, was es ist.
Kann mir jemand das bitte erklären, indem er auch "die Notwendigkeit von POSIX" erklärt?
linux
unix
posix
terminology
Krallen
quelle
quelle
Antworten:
POSIX ist eine vom IEEE spezifizierte Standardfamilie, mit der die von Unix-y-Betriebssystemen bereitgestellten Anwendungsprogrammierschnittstellen (und Nebenprobleme wie Befehlszeilen-Shell-Dienstprogramme) geklärt und vereinheitlicht werden sollen. 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, wird es Ihnen schwerer fallen, wenn Sie dieses Programm oder diese Bibliothek in Zukunft auf andere Unix-y-Systeme (z. B. MacOSX) portieren möchten.
quelle
Microsoft's market share on desktops, at least, makes it "what the world follows"
- Interessant zu bemerken, wie viel sich seit diesem Kommentar von 2009 geändert hat :)Die wichtigsten Dinge, die POSIX 7 definiert
C API
Erweitert ANSI C erheblich um Dinge wie:
mkdir
,dirname
,symlink
,readlink
,link
(Hardlinks)poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, Semaphorensem_*
, gemeinsam benutzten Speicher (shm_*
)kill
, Scheduling - Parameter (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
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
oderEXIT_SUCCESS
für Erfolg,EXIT_FAILURE
für Misserfolg 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.POSIX scheint jedoch nicht
128 + SIGNAL_ID
die von Bash verwendete Regel anzugeben : /unix/99112/default-exit-code-when-process-is-terminatedRegulä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 PfadtrennzeichenNUL
kann nicht benutzt werden.
istcwd
,..
Elternteila-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 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 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?
quelle
POSIX ist:
Grundsätzlich handelte es sich um eine Reihe von Maßnahmen, um die Entwicklung und Verwendung verschiedener UNIX-Varianten durch eine (meistens) gemeinsame API und gemeinsame Dienstprogramme zu vereinfachen. Die eingeschränkte POSIX-Konformität wurde auch auf verschiedene Windows-Versionen ausgeweitet.
quelle
Lassen Sie mich die mürrische "inoffizielle" Erklärung geben.
POSIX ist eine Reihe von Standards, die versuchen, "UNIX" - und UNIX-ähnliche Systeme von solchen zu unterscheiden, die mit ihnen nicht kompatibel sind. Es wurde von der US-Regierung für Beschaffungszwecke erstellt. Die Idee war, dass die US-Bundesbeschaffungen eine Möglichkeit benötigen, die Anforderungen für verschiedene Arten von Angeboten und Verträgen rechtlich so festzulegen, dass Systeme ausgeschlossen werden können, auf die eine bestimmte vorhandene Codebasis oder ein bestimmtes Programmierpersonal NICHT portierbar wäre.
Da POSIX post facto geschrieben wurde ... um einen lose ähnlichen Satz konkurrierender Systeme zu beschreiben ... wurde es NICHT auf eine Weise geschrieben, die implementiert werden konnte.
So wurde beispielsweise Microsoft NT mit einer ausreichenden POSIX-Konformität geschrieben, um sich für einige Gebote zu qualifizieren ... obwohl das POSIX-Subsystem hinsichtlich praktischer Portabilität und Kompatibilität mit UNIX-Systemen im Wesentlichen unbrauchbar war.
Im Laufe der Jahrzehnte wurden verschiedene andere Standards für UNIX geschrieben. Dinge wie der SPEC1170 (spezifizierte elfhundertundsiebzig Funktionsaufrufe, die kompatibel implementiert werden mussten) und verschiedene Inkarnationen des SUS (Single UNIX Specification).
Diese "Standards" waren größtenteils für jede praktische technische Anwendung unzureichend. Sie existieren meistens aus Gründen der Argumentation, des Rechtsstreits und aus anderen Gründen, die nicht funktionieren.
quelle
POSIX ist ein Standard für Betriebssysteme, der das Schreiben plattformübergreifender Software erleichtern soll. Es ist eine besonders große Sache in der Welt von Unix.
quelle
POSIX ist eine Reihe von Standards, die von IEEE und The Open Group festgelegt wurden und die beschreiben, wie ein ideales Unix funktionieren würde. Programmierer, Benutzer und Administratoren können sich mit dem POSIX-Dokument vertraut machen und erwarten, dass eine POSIX-Beschwerde Unix alle genannten Standardfunktionen bietet.
Da jedes Unix die Dinge ein wenig anders macht - Solaris, Mac OS X, IRIX, BSD und Linux haben alle ihre Macken - ist POSIX besonders nützlich für die Industrie, da es eine Standardumgebung definiert, in der gearbeitet werden kann. Die meisten Funktionen in der C-Bibliothek basieren auf POSIX. Ein Programmierer kann daher einen in seiner Anwendung verwenden und erwarten, dass er sich auf den meisten Unices gleich verhält.
Die unterschiedlichen Bereiche von Unix stehen jedoch in der Regel im Mittelpunkt und nicht die Standardbereiche.
Das Tolle an POSIX ist, dass Sie es gerne selbst lesen können:
Ausgabe 7 ist als POSIX.1-2008 bekannt, und es gibt neue Dinge darin - Google-fu für POSIX.1 und so ermöglicht es Ihnen, den gesamten Verlauf hinter Unix zu sehen.
quelle
Aus dem Buch: Ein praktischer Leitfaden für Linux
quelle
Posix ist eher ein Betriebssystem, es ist ein "Betriebssystemstandard". Sie können es sich als ein imaginäres Betriebssystem vorstellen, das eigentlich nicht existiert, aber eine Dokumentation hat. Diese Papiere sind der "Posix-Standard", definiert vom IEEE, der großen Standardorganisation der USA. Die Betriebssysteme, die diese Spezifikation implementieren, sind "Posix-konform".
Regierungsvorschriften bevorzugen Posix-konforme Lösungen für ihre Investitionen. Daher hat die Posix-Konformität einen erheblichen finanziellen Vorteil, insbesondere für die großen IT-Unternehmen der USA.
Die Belohnung für ein Betriebssystem, das vollständig Posix-kompatibel ist, ist die Garantie, dass alle Posix-kompatiblen Anwendungen nahtlos kompiliert und ausgeführt werden.
Linux ist das bekannteste. Auch hier spielen OSX, Solaris, NetBSD und Windows NT. Free- und OpenBSD sind nur "fast" Posix-konform. Die Posix-Konformität des WinNT ist nur eine Pseudolösung, um diese oben genannte Regierungsverordnung zu vermeiden.
quelle
Dieser Standard bietet eine gemeinsame Basis für Unix-ähnliche Betriebssysteme. Es gibt an, wie die Shell funktionieren soll, was von Befehlen wie ls und grep zu erwarten ist und eine Reihe von C-Bibliotheken, die C-Autoren voraussichtlich zur Verfügung haben.
Beispielsweise werden die Pipes, mit denen Befehlszeilenbenutzer Befehle aneinanderreihen, hier detailliert angegeben. Dies bedeutet, dass die Popen-Funktion (Pipe Open) von C dem POSIX-Standard und nicht dem ISO C-Standard entspricht.
quelle
POSIX steht für Portable Operating System Interface und ist ein IEEE-Standard, der die Portabilität von Anwendungen erleichtert. POSIX ist ein Versuch eines Konsortiums von Anbietern, eine einzige Standardversion von UNIX zu erstellen.
quelle
POSIX definiert eine Reihe von Standards für ein Betriebssystem oder ein Programm. Ziel ist es, neue Software zu schreiben, die mit UNIX-ähnlichen Systemen kompatibel ist.
Beispielsweise kann ein unter Linux ausgeführtes Programm auch kompiliert und auf anderen UNIX-ähnlichen Systemen wie Solaris, HP-UX und AIX usw. ausgeführt werden.
Die beliebtesten Beispiele sind
GNU Bash
100% POSIX-Konformität undgawk
Nützlichkeit.quelle
Posix regelt die Interoperabilität, Portabilität und in anderen Bereichen wie der Verwendung und dem Mechanismus von Fork, Berechtigungen
und Dateisystemstandards wie / etc, / var, / usr und so weiter. Wenn Entwickler ein Programm unter einem Posix-kompatiblen System wie beispielsweise Linux schreiben, wird daher im Allgemeinen nicht immer garantiert, dass es auf einem anderen Posix-kompatiblen System wie dem IBM AIX-System oder anderen kommerziellen Unix-Varianten ausgeführt wird. Posix ist eine gute Sache, da es die Softwareentwicklung für maximale Portabilität erleichtert, die es anstrebt. Hoffe diese Antwort macht Sinn.Vielen Dank an Jed Smith & Tinkertim für den Hinweis auf meinen Fehler - mein schlechtes !!! :(
quelle
Eine Spezifikation (Blaupause) darüber, wie ein Betriebssystem mit dem späten UNIX-Betriebssystem kompatibel gemacht werden kann (möge Gott ihn segnen!). Aus diesem Grund haben macOS und GNU / Linux sehr ähnliche Terminalbefehlszeilen, GUIs, Bibliotheken usw., da beide gemäß dem POSIX-Entwurf entworfen wurden.
POSIX sagt Ingenieuren und Programmierern nicht, wie sie codieren sollen, sondern was sie codieren sollen.
quelle
Einige Fakten über POSIX, die nicht so hell sind.
POSIX ist auch die Systemaufrufschnittstelle oder API und fast 30 Jahre alt.
Es wurde für den serialisierten Datenzugriff auf lokalen Speicher unter Verwendung einzelner Computer mit einzelnen CPUs entwickelt.
Sicherheit war in POSIX von Natur aus kein großes Problem, was im Laufe der Jahre zu zahlreichen Angriffen auf die Rennbedingungen führte und Programmierer dazu zwang, diese Einschränkungen zu umgehen.
Es werden immer noch schwerwiegende Fehler entdeckt, die mit einem sichereren POSIX-API-Design hätten vermieden werden können.
POSIX erwartet, dass Benutzer jeweils einen synchronen Anruf ausführen und auf die Ergebnisse warten, bevor sie den nächsten ausgeben. Heutige Programmierer erwarten, dass viele asynchrone Anforderungen gleichzeitig ausgegeben werden, um den Gesamtdurchsatz zu verbessern.
Diese synchrone API ist besonders schlecht für den Zugriff auf Remote- und Cloud-Objekte, bei denen eine hohe Latenz wichtig ist.
quelle