Provided by: manpages-es_1.55-10_all bug

NOMBRE

       intro - Introduccion a las llamadas al sistema

DESCRIPCI'ON

       Este   capitulo   describe  las  llamadas  al  sistema  de  Linux.   En
       syscalls(2) encontrara  una  lista  de  las  164  llamadas  al  sistema
       presentes en Linux 2.0

   Llamadas directas
       En  la  mayoria  de  los  casos  no es necesario invocar una llamada al
       sistema directamente, pero hay veces en que la  biblioteca  C  estandar
       carece de una funcion adecuada.

   Sinopsis
       #include <linux/unistd.h>

       Una macro de tipo _syscall

   Configuraci'on
       Lo  importante  a conocer sobre una llamada al sistema es su prototipo.
       Es necesario saber  cuantos  argumentos  usa,  sus  tipos,  y  el  tipo
       retornado por la funcion. Hay seis macros que facilitan la llamada real
       al sistema. Tienen la siguiente forma:

              _syscallX(tipo,nombre,tipo1,arg1,tipo2,arg2,...)

                     donde X es 0-5, el numero  de  argumentos  usado  por  la
                            llamada del sistema

                     tipo es el tipo devuelto por la llamada al sistema

                     nombre es el nombre de la llamada al sistema

                     tipoN es el tipo del argumento no N

                     argN es el nombre del argumento no N

       Estas  macros  crean  una  funcion  llamada  nombre  con los argumentos
       especificados. Una vez incluida _syscall() en  el  fichero  fuente,  se
       invoca a la llamada al sistema mediante nombre.

EJEMPLO

       #include <stdio.h>
       #include <linux/unistd.h>     /* para macros _syscallX */
       #include <linux/kernel.h>     /* para la estructura sysinfo */

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

       /* Nota: si copia directamente de la fuente nroff, recuerde
       BORRAR las barras invertidas extra en las sentencias printf */

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

            error = sysinfo(&s_info);
            printf("Codigo de error = %d\n", error);
            printf("Uptime = %ds\nCarga: 1 min %d / 5 min %d / 15 min %d\n"
                 "RAM: total %d / libre %d / compartida %d\n"
                 "Memoria en bufers = %d\nSwap: total %d / libre %d\n"
                 "Numero de procesos = %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);
       }

Ejemplo de salida

       Codigo de error = 0
       Uptime = 502034s
       Carga: 1 min 13376 / 5 min 5504 / 15 min 1152
       RAM: total 15343616 / libre 827392 / compartida 8237056
       Memoria en bufers = 5066752
       Swap: total 27881472 / libre 24698880
       Numero de procesos = 40

OBSERVACIONES

       Las  macros  _syscall()  NO producen un prototipo. Es posible que tenga
       que crear uno, especialmente para usuarios de C++.

       Las llamadas al sistema no tienen porque retornar solo codigos de error
       positivos  o  negativos.  Es  necesario  examinar el codigo fuente para
       estar seguro de como retornan los errores. Generalmente, es el negativo
       de  un  codigo  de  error  estandar,  por  ejemplo,  -EPERM. Las macros
       _syscall() devolveran el resultado r de la llamada al sistema cuando  r
       no  sea negativo, pero devolveran -1 y estableceran la variable errno a
       -r cuando r sea negativo.  Para los codigos de error vea errno(3).

       Algunas  llamadas  al  sistema,  como  mmap,  requieren  mas  de  cinco
       argumentos.   Estos  se  manejan  colocandose  en  la pila y pasando un
       puntero al bloque de argumentos.

       Cuando se define una llamada al sistema, los tipos de  argumento  DEBEN
       pasarse  por  valor  o  mediante  puntero (para conjuntos de datos como
       estructuras).

CONFORME A

       Ciertos codigos se usan para indicar variantes  y  estandares  de  Unix
       conforme a los cuales operan llamadas de la seccion. Estos son:

       SVr4   System  V  Release 4 Unix, tal como se describe en "Programmer's
              Reference  Manual:  Operating  System  API  (Intel  processors)"
              (Prentice-Hall 1992, ISBN 0-13-951294-2).

       SVID   System  V  Interface  Definition,  tal  como se describe en "The
              System V Interface Definition, Fourth Edition".

       POSIX.1
              IEEE  1003.1-1990  parte  1,  tambien  conocido   como   ISO/IEC
              9945-1:1990s,  tambien  conocido  como  "IEEE Portable Operating
              System Interface for Computing Environments", tal como se aclara
              en  la  "POSIX  Programmer's Guide" de Donald Lewine (O'Reilly &
              Associates, Inc., 1991, ISBN 0-937175-73-0).

       POSIX.1b
              IEEE  Std  1003.1b-1993   (estandar   POSIX.1b)   que   describe
              prestaciones   en   tiempo   real  de  los  sistemas  operativos
              portables, tambien conocido como ISO/IEC 9945-1:1996,  tal  como
              se  aclara en "Programming for the real world - POSIX.4" de Bill
              O. Gallmeister (O'Reilly & Associates, Inc. ISBN 1-56592-074-0).

       SUS, SUSv2
              Single Unix Specification (Especificacion para un  Unix  Unico).
              (Desarrollado   por   X/Open  y  The  Open  Group.  Vea  tambien
              http://www.UNIX-systems.org/version2/ .)

       4.3BSD/4.4BSD
              Las distribuciones 4.3 y 4.4 de  Berkeley  Unix.   4.4BSD  tenia
              compatibilidad ascendente con 4.3.

       V7     Version 7, el Unix ancestral de Bell Labs.

FICHEROS

       /usr/include/linux/unistd.h

V'EASE TAMBI'EN

       errno(3)