Was ich meine wirklich zu sagen, ist: Ist der C-Bibliothek als die stable/dokumentiert Linux API von Politik sein, und der Systemaufruf API/ABI des Kernels instabil angesehen wird (kann sich ändern) und somit nicht dokumentiert absichtlich oder mit niedriger Priorität?
Es ist unmöglich, Politik zu sprechen, ohne Angabe dessen Politik für was.
Menschen Programmierung für "Linux" sind in der Tat in der Tat Programmierung für eine oder mehrere Varianten von GNU/Linux, im Gegensatz zu für den nackten Kernel. Ich bin daher geneigt zu sagen, dass wir wahrscheinlich keine Kernelentwicklerrichtlinie in Erwägung ziehen. In der Tat, wenn die C-Bibliothek-Schnittstelle überhaupt verfügbar ist, dann sprechen wir nicht von einem nackten Kernel. Außerdem nehme ich an, dass Sie sich, basierend auf Ihrem Tagging, nach der C-Programmierung erkundigen. Wenn Sie in Assembly programmieren würden, wäre die rohe Syscall-Schnittstelle natürlich und angemessen, und der Rest meiner Kommentare würde nicht zutreffen.
Wenn Sie in der Tat GNU/Linux unter Ausschluss von irgendetwas anderen zielen, dann ist die Frage etwas sinnvoll. Auf der anderen Seite ist es häufig der Fall, dass man es vorzieht, eine umfassendere Kompatibilität zu programmieren. In diesem Fall gibt es wirklich keine Alternative zur Verwendung der Syscall-Schnittstellen der C-Bibliothek, da die rohen Systemaufrufe jedes Systems unterschiedlich sind. Die Syscall-Schnittstellen von Glibc sind ziemlich gut mit POSIX und SUS kompatibel, so dass sie (richtig) für die Portabilität von großem Vorteil sind. Selbst wenn andere Unix- und Unix-ähnliche Systeme wie OS X, BSD, Solaris usw. keine unmittelbaren Ziele darstellen, ist es selten ein Verlust, die Möglichkeit offen zu halten, Ihre Software auf solchen Systemen zu verwenden.
Wie auch immer, wenn Sie bestimmt sind, dass Ihre Software Linux syscalls direkt ausführt, würden Sie dann Inline Assembly einfügen, um das überall zu machen, wo Sie es haben wollten? Sicher nicht - Sie würden Wrapper-Funktionen schreiben.Warum sollten Sie dann die gründlich getesteten und gut dokumentierten Wrapperfunktionen, die bereits von der C-Bibliothek bereitgestellt werden, ablehnen?
Natürlich ändert sich die Linux-Syscall-Schnittstelle in gewissem Maße zwischen Kernel-Versionen. Das kann als die Sache betrachtet werden, die Versionen unterscheidet (ich meine x.2y
->x.2z
oder x.y
->z.w
). Ich bin nicht gut darauf eingestellt, wie groß solche Änderungen normalerweise sind, aber es gab inkompatible Änderungen in der Vergangenheit, und die Verwendung der C-Bibliothek-Schnittstellen isoliert Sie in gewisser Weise von solchen Änderungen. Wie oben beschrieben, denke ich jedoch, dass es andere, größere Gründe dafür gibt, die C-Bibliotheksschnittstelle vorzuziehen.
re: _historical Diskussion_. Sie könnten etwas finden *** [hier] (https://www.safaribooksonline.com/library/view/linux-system-programming/9781449341527/ch01.html) ***. Keine Tiefe, aber mehr Überblick über Themen, einschließlich API/ABI. – ryyker
@ryyker gute Suche –
Wenn Sie fragen, wie Systemaufrufargumente an den Kernel übergeben werden, ist der ABI innerhalb einer gegebenen Prozessorarchitektur stabil. In den Prozessorarchitekturen sehen Sie Abweichungen in der ABI. – JJF