Provided by: manpages-cs_0.18.20090209-3_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,jméno,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í

                     jméno 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/