Artikel verschlagwortet mit ‘Kernel’
Systemcalls mit C unter Linux
So… das Thema dieses Eintrags sind also „Systemcalls mit C unter Linux“… doch was sind jetzt eigentlich „Systemcalls“ oder auch kurz „Syscalls“?
Ich will mich hier kurz fassen: Syscalls bieten eine Möglichkeit, aus einem Benutzerprogramm (oder eben aus einem C-Programm heraus) Funktionen des Kernels zu benutzen; normalerweise hat man ja auf diese wichtigen, geschützten Funktionen (berechtigterweise) keinen Zugriff.
Kommen wir jetzt allerdings zum Thema Linux: was gibt es jetzt dort also für Syscalls? Die Antwort steht in der Datei /usr/src/linux-2.6.22.5-31/include/asm-i386/unistd.h. Dort sind alle Syscalls aufgeführt
(Ordnernamen können abweichen)
Doch ohne Besipiele wäre dieser Eintrag doch recht öde, von daher hier mal ein kleines Beispielprogramm:
#include <unistd.h>
int main( void )
{
write( 0, "Hallo, Welt!\n", 13 );
return 0;
}
Der hier benutzte Syscall ist write; dieser Syscall trägt die Nummer 4 (ja, jeder Syscall hat auch eine Nummer, diese steht ebenfalls in unistd.h). Was macht dieser Syscall nun? Schlichte Antwort: er gibt die Zeichenkette, die als zweiter Parameter übergeben wird, einfach aus. Wo diese Zeichenkette jetzt ausgegeben werden soll, legt der erste Parameter fest; 0 steht einfach für die Standardausgabe – den Bildschirm. Die 13 gibt einfach die Anzahl der zu schreibenden Zeichen an
(Würden wir zum Beispiel anstatt 13 die Zahl 11 angeben, wäre die Ausgabe: Hallo, Welt)
Zugegeben: dieses Programm war nicht gerade spektakulär, aber es gibt ja auch noch andere Syscalls – einfach mal ausprobieren!