Les appels systèmes

Sous Unix il existe une différence entre les appels système et les fonctions.

Un appel système est un moyen de communiquer directement avec le noyau de la machine. Le noyau regroupe toutes les opérations vitales de la machine. Ainsi il est impossible d'écrire directement sur le disque dur. L'utilisateur doit passer par des appels systèmes qui contrôlent les actions qu'il fait. Ceci permet de garantir :

La commande man

La distinction entre les appels système et les fonctions est faite par la commande man. Il existe plusieurs sections : D'autres sections peuvent exister : n pour les nouvelles pages, l pour les applications locales, X pour les applications X-window, ....

La commande trace.

Sur les systèmes Sun, les appels systèmes peuvent être visualisés en utilisant la commande trace. Par exemple : open ("/usr/lib/ld.so", 0, 04000000021) = 3 read (3, "".., 32) = 32 mmap (0, 40960, 0x5, 0x80000002, 3, 0) = 0xef7f0000 mmap (0xef7f8000, 8192, 0x7, 0x80000012, 3, 32768) = 0xef7f8000 open ("/dev/zero", 0, 07) = 4 getrlimit (3, 0xeffff4b0) = 0 mmap (0xef800000, 8192, 0x3, 0x80000012, 4, 0) = 0xef800000 close (3) = 0 getuid () = 16 getgid () = 21 open ("/etc/ld.so.cache", 0, 05000000021) = 3 fstat (3, 0xeffff350) = 0 mmap (0, 4096, 0x1, 0x80000001, 3, 0) = 0xef7e8000 close (3) = 0 open ("/usr/lib/libc.so.1.9", 0, 045674) = 3 read (3, "".., 32) = 32 mmap (0, 458764, 0x5, 0x80000002, 3, 0) = 0xef770000 mmap (0xef7dc000, 16384, 0x7, 0x80000012, 3, 442368) = 0xef7dc000 close (3) = 0 open ("/usr/lib/libdl.so.1.0", 0, 045714) = 3 read (3, "".., 32) = 32 mmap (0, 16396, 0x5, 0x80000002, 3, 0) = 0xef764000 mmap (0xef766000, 8192, 0x7, 0x80000012, 3, 8192) = 0xef766000 close (3) = 0 close (4) = 0 getuid () = 16 gettimeofday (0xeffff5e8, 0) = 0 ioctl (1, 0x40125401, 0xeffff5dc) = -1 ENOTTY (Inappropriate ioctl for device) getpagesize () = 4096 brk (0x9210) = 0 brk (0xa210) = 0 lstat (".", 0xeffff5b0) = 0 open (".", 04, 0) = 3 fstat (3, 0xeffff4e0) = 0 brk (0xd210) = 0 fcntl (3, 02, 0x1) = 0 getdents (3, 0x9268, 8192) = 2984 getdents (3, 0x9268, 8192) = 0 close (3) = 0 ioctl (1, 0x40125401, 0xefffe9f4) = -1 ENOTTY (Inappropriate ioctl for device) fstat (1, 0xefffea68) = 0 close (0) = 0 write (1, "DemoPrism\nNews\nPrism\nbin\ncahierT".., 267) = DemoPrism News Prism bin <<<<<contenu effacé>>>> tmp2 tp vhdl.sav 267 close (1) = 0 close (2) = 0 exit (0) = ? Le contenu grisé correspond aux appels système effectués lors du chargement du programme. Sans rentrer dans les détails, il s'agit du chargement des librairies dynamiques. Pour ceux qui sont curieux de comprendre ce que fait le programme et qui ont déjà quelques bases d'Unix voilà l'explication des commandes restantes. Pour les autres, vous pouvez aller directement au paragraphe suivant.