Sind Funktionsaufrufe wie read (), write () tatsächliche Systemaufrufe in Linux?

8

Ich habe Programme in C / C ++ geschrieben, die die Linux-API nutzen und Systemaufrufe wie fork (), read (), write () usw. machen. Jetzt frage ich mich, ob diese Bibliotheksfunktionen tatsächlich funktionieren Systemaufrufe, oder sind sie eine Art Wrapper-Funktionen.

Was passiert wirklich, wenn ein Programm einen Aufruf von write () aufruft? Wie funktioniert diese Funktion mit dem Kernel? Wenn das ein Wrapper ist, warum brauchen wir es dann?

    
Tushar Poddar 28.02.2016, 07:40
quelle

2 Antworten

6

Alle diese Funktionen sind echte Benutzerraumfunktionen in libc.so , mit denen Ihre Binärdatei verknüpft ist. Aber die meisten von ihnen sind nur kleine Wrapper für syscalls, die die Schnittstelle zwischen dem Userspace und dem Kernel sind (siehe auch syscall(2) ).

Beachten Sie, dass Funktionen, die rein Userspace sind (wie fmod(3) ) oder einige Dinge in Userspace zusätzlich zum Aufruf des Kernels (wie execl(3) ) ihre Manpages im Abschnitt 3 haben, während Funktionen, die nur den Kernel aufrufen (wie read(2) ) haben sie im Abschnitt 2.

    
wRAR 28.02.2016, 07:49
quelle
1

mit diesem einfachen Code:

%Vor%

Sie können strace verwenden, um Systemaufrufe zu finden, die in der Binärdatei verwendet werden:

%Vor%

Das Ergebnis ist etwa so:

%Vor%

wie für fork() , es ist eigentlich ein Wrapper um clone() system call

    
arash kordi 28.02.2016 09:21
quelle

Tags und Links