Provided by: manpages-cs_0.18.20090209-1_all bug

JMÉNO

       intro - Úvod do volání jádra

POPIS

       Tato kapitolka popisuje volání jádra v Linuxu.

   Přímé volání
       Ve  většině  případů  není  třeba  volat  systémové  volání  přímo, ale
       existují případy, kdy standardní knihovna jazyka C  neobsahuje  vhodnou
       funkci, která volání provede.

   Syntaxe
       #include <linux/unistd.h>

       makro _syscall

       předpokládané volání jádra

   Implementace
       Důležitou  věcí,  kterou  je  třeba  o systémovém volání vědět, je jeho
       prototyp.  Budete-li chtít toto volání použít, potřebujete vědět  kolik
       má  parametrů a jakého typu, jaký typ vrací.  Je definováno šest maker,
       která usnadňují skutečná volání jádra.  Mají tento tvar:

              _syscallX(typ,jmno,typ1,arg1,typ2,arg2,...)

                     kde X je 0-5, což je počet argumentů pro  dané  systémové
                             volání.

                     typ je návratový typ volání

                     jmno je jméno volání

                     typN je typ N-tého argumentu

                     argN je jméno N-tého argumentu

       Tato  makra  vytvoří  funkci  se  jménem  name  s  Vámi specifikovanými
       argumenty. Jestliže vložíte _syscall() do  Vašeho  zdrojového  souboru,
       budete moci používat systémové volání pod jménem name.

PŘÍKLAD

       #include <stdio.h>
       /* zde jsou definována makra _syscallX() */
       #include <linux/unistd.h>
       /* definice struct sysinfo */
       #include <linux/kernel.h>
       _syscall1(int, sysinfo, struct sysinfo *, info);
       /* Poznámka: jestliže budete tento příklad kopírovat přímo ze
       zdrojového textu této manuálové stránky, nezapomeňte odstranit
       přebytečná obrácená lomítka u znaku \n */

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

          error = sysinfo(&s_info);
          printf("code error = %d\n", error);
          printf("Uptime = %ds\nLoad: 1min %d / 5min %d / 15min %d\n"
             "RAM: total %d / free %d / shared %d\n"
             "Memory in buffers = %d\nSwap: total %d / free %d\n"
             "Number of processes = %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);
       }

Příklad výstupu

       code error = 0
       uptime = 502034s
       Load: 1min 13376 / 5min 5504 / 15min 1152
       RAM: total 15343616 / free 827392 / shared 8237056
       Memory in buffers = 5066752
       Swap: total 27881472 / free 24698880
       Number of processes = 40

POZNÁMKY

       Makro  _syscall() nevytváří prototyp. Musíte si jej vytvořit, což platí
       hlavně pro C++.

       Systémová volání  nemusí  vracet  kladné  nebo  záporné  chybové  kódy.
       Musíte  si  přečíst  jejich zdrojový text, abyste se ujistili, co mohou
       vrátit.  Obvykle je to opačná hodnota standardní chyby,  např.  -EPERM.
       Makra  _syscall() vrací hodnotu r systémového volání , je-li nezáporná,
       jinak vrací -1 a nastaví hodnotu errno na -r.

       Některá systémová volání, jako  např.   mmap,  požadují  více  než  pět
       argumentů.  Toto  se  obchází  umístěním argumentů na vrchol zásobníku.
       Potom jako argument volání použijeme ukazatel na blok argumentů.

       Při definici volání jádra  MUSÍ  být  argumenty  volány  hodnotou  nebo
       odkazem (pro struktury).

SOUBORY

       /usr/include/linux/unistd.h

AUTOŘI

       Autory  a  podmínky  pro  šíření  a  kopírování najdete v záhlaví každé
       manuálové stránky. Všimněte si, že se mohou stránku od stránky lišit.

VAROVÁNÍ

       Překlad  je  pravděpodobně  zastaralý.  Pokud  chcete  pomoci  s   jeho
       aktualizací, zamiřte na http://man-pages-cs-wiki.homelinux.net/