INTRO(2)           Manuel du programmeur Linux           INTRO(2)


NOM
       intro - Introduction à la section des appels systèmes.

DESCRIPTION
       Ce  chapitre  décrit  les  appels systèmes de Linux.  Pour
       avoir une liste des 164 appels systèmes  disponibles  dans
       Linux 2.0, voyez la page syscalls(2).

   Appel Direct
       Dans la plupart des cas il n'est pas nécessaire d'invoquer
       directement un appel système, mais il arrive  parfois  que
       la  bibliothèque  C standard n'implémente pas une fonction
       utile.

   Synopsis
       #include <linux/unistd.h>

       une macro _syscall

       L'appel systeme désiré


   Setup
       La chose la plus  importante  à  connaître  concernant  un
       appel  système  est son prototype. Vous devez connaître le
       nombre d'arguments, leurs types, et le type de  retour  de
       la fonction.  Il y a 6 macros simplifiant l'appel effectif
       au système.  Elles ont la forme :

              _syscallX(type,name,type1,arg1,type2,arg2,...)

                     avec X dans l'intervalle 0-5,  correspondant
                               au  nombre  d'arguments de l'appel
                               système.

                     type est le type de la valeur  renvoyée  par
                               l'appel système.

                     name est le nom de l'appel système.

                     typeN est le type du Nième argument.

                     argN est le nom du Nième argument.

       Ces macros créent une fonction appelée name avec les argu­
       ments spécifiés. Une fois inclus le   _syscall()  dans  le
       fichier source, on effectue l'appel système avec name.

EXEMPLE
       #include <stdio.h>
       #include <linux/unistd.h>     /* les macros _syscallX */
       #include <linux/kernel.h>     /* pour struct sysinfo  */

       _syscall1(int, sysinfo, struct sysinfo *, info);



Linux                   21 Septembre 1998                       1





INTRO(2)           Manuel du programmeur Linux           INTRO(2)


       /*
        * Note : Si vous copiez directement depuis le source nroff
        * de cette page,  n'oubliez pas d'enlever les backslashes
        * supplémentaires dans les printf.
        */

       int main(void)
       {
            struct sysinfo s_info;
            int error;

            error = sysinfo(&s_info);
            printf("code d'erreur = %d\n", error);
               printf("Uptime = %ds\nCharge: 1 min %d / 5 min %d / 15 min %d\n"
                       "RAM: totale %d / libre %d / partagee %d\n"
                       "Mémoire dans buffers = %d\nSwap: total %d / libre %d\n"
                       "Nombre de processus = %d\n",
                 s_info.uptime, s_info.loads[0],
                 s_info.loads[1], s_info.loads[2],
                 s_info.totalram, s_info.freeram,
                 s_info.sharedram, s_info.bufferram,
                 s_info.totalswap, s_info.freeswap,
                 s_info.procs);
            return(0);
       }

EXEMPLE D'ÉXÉCUTION
       code d'erreur = 0
       uptime = 502034s
       Charge: 1 min 13376 / 5 min 5504 / 15 min 1152
       RAM: totale 15343616 / libre 827392 / partagee 8237056
       Mémoire dans buffers = 5066752
       Swap: total 27881472 / libre 24698880
       Nombre de processus = 40

NOTES
       La  macro  _syscall() ne crée pas de prototype. Il faut le
       fournir vous-même, principalement en C++.

       Les appels systèmes ne renvoient  pas  nécessairement  des
       code  d'erreurs tous positifs ou négatifs. Vous devez lire
       les sources pour vérifier le retour en  erreur.  Générale­
       ment,  ce  sont  des  codes d'erreur négatifs, par exemple
       -EPERM.

       La macro _syscall() renverra  le  résultat  r  de  l'appel
       système  quand  r  est  positif  ou  nul, mais renverra -1
       sinon, en positionnant la variable errno a -r.

       Certains appels systèmes, comme mmap, nécessitent plus  de
       cinq arguments. Ceci est géré en plaçant les arguments sur
       la pile et en passant un pointeur sur le bloc d'arguments.





Linux                   21 Septembre 1998                       2





INTRO(2)           Manuel du programmeur Linux           INTRO(2)


CONFORMITÉ
       Dans  ce  paragraphe, des abréviations indiquent les vari­
       antes d'Unix, ou des standards  dont  les  appels-systèmes
       sont  conformes  à la description donnée dans ces pages de
       manuel. Il s'agit de :

       SVr4   System V Release 4 Unix, comme indiqué  dans  "Pro­
              grammer's  Reference  Manual:  Operating System API
              (Intel  processors)"  (Prentice-Hall   1992,   ISBN
              0-13-951294-2)

       SVID   System  V  Interface  Definition, comme décrit dans
              "The System V  Interface  Definition,  Fourth  Edi­
              tion",         disponible        ftp://ftp.fpk.nov­
              ell.com/pub/unix-standards/svid   sous   forme   de
              fichier Postscript.

       POSIX.1
              IEEE  1003.1-1990  part  1, connu également sous le
              nom  de  ISO/IEC  9945-1:1990s,  ou  le  nom  "IEEE
              Portable  Operating  System Interface for Computing
              Environments", comme  indiqué  dans  Donald  Lewine
              "POSIX  Programmer's Guide" (O'Reilly & Associates,
              Inc., 1991, ISBN 0-937175-73-0.

       POSIX.1b
              IEEE Std 1003.1b-1993 (POSIX.1b standard) décrivant
              les options temps-réel des systèmes d'exploitations
              portables, aussi  connu  sous  le  nom  de  ISO/IEC
              9945-1:1996, indiqué dans "Programming for the real
              world - POSIX.4" de Bill O. Gallmeister (O'Reilly &
              Associates, Inc. ISBN 1-56592-074-0).

       4.3BSD/4.4BSD
              Les distributions 4.3 et 4.4 de l'Unix Berkeley BSD
              était compatible avec 4.3.

       V7     Version 7, l'Unix ancestral des Laboratoires  Bell.

FICHIERS
       /usr/include/linux/unistd.h

AUTEURS
       Dans l'en-tête de la page de manuel se trouvent le nom des
       auteurs et les conditions de copyright. Ceci peut  changer
       suivant les pages !


VERSION FRANCAISE
       La  traduction  de  la section 2 des pages de manuel a été
       effectuée en tentant de rester le plus fidèle possible  au
       texte  original.   Il  nous est arrivé cependant d'ajouter
       certains commentaires explicatifs supplémentaires, et même
       quelques exemples.



Linux                   21 Septembre 1998                       3





INTRO(2)           Manuel du programmeur Linux           INTRO(2)


       Dans  la  partie  NOM des pages, on trouvera souvent entre
       parenthèses  un  terme  anglais   correspondant   au   mot
       français.  Loin  de  nous  l'idée  de vouloir expliquer au
       lecteur que filesystem signifie système de fichiers,  mais
       ceci  élargit les possibilités de recherche des pages avec
       la commande apropos(1)

       Pour que cette commande fonctionne, il vous faut  modifier
       le  script  makewhatis (souvent dans /usr/sbin) afin qu'il
       accepte l'identificateur de section  NOM  à  égalité  avec
       NAME.


       Nous avons également uniformisé l'ensemble des en-têtes et
       bas de pages de la section 2.


TRADUCTION
       Christophe Blaess, 1997.






































Linux                   21 Septembre 1998                       4