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

JM'ENO

       intro - Uvod do volani jadra

POPIS

       Tato kapitolka popisuje volani jadra v Linuxu.

   P'im'e vol'an'i
       Ve  vtin  pipad  neni  teba  volat  systemove volani pimo, ale existuji
       pipady, kdy standardni knihovna jazyka  C  neobsahuje  vhodnou  funkci,
       ktera volani provede.

   Syntaxe
       #include <linux/unistd.h>

       makro _syscall

       pedpokladane volani jadra

   Implementace
       Dleitou  vci, kterou je teba o systemovem volani vdt, je jeho prototyp.
       Budete-li chtit toto volani pouit, potebujete vdt kolik ma  parametr  a
       jakeho  typu,  jaky typ vraci.  Je definovano est maker, ktera usnaduji
       skutena volani jadra.  Maji tento tvar:

              _syscallX(typ,jm'eno,typ1,arg1,typ2,arg2,...)

                     kde X je 0-5, co je  poet  argument  pro  dane  systemove
                            volani.

                     typ je navratovy typ volani

                     jm'eno je jmeno volani

                     typN je typ N-teho argumentu

                     argN je jmeno N-teho argumentu

       Tato  makra  vytvoi  funkci  se  jmenem  name  s  Vami  specifikovanymi
       argumenty. Jestlie  vloite  _syscall()  do  Vaeho  zdrojoveho  souboru,
       budete moci pouivat systemove volani pod jmenem name.

P'IKLAD

       #include <stdio.h>
       /* zde jsou definovana makra _syscallX() */
       #include <linux/unistd.h>
       /* definice struct sysinfo */
       #include <linux/kernel.h>
       _syscall1(int, sysinfo, struct sysinfo *, info);
       /* Poznamka: jestlie budete tento piklad kopirovat pimo ze
       zdrojoveho textu teto manualove stranky, nezapomete odstranit
       pebytena obracena lomitka 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'iklad v'ystupu

       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'AMKY

       Makro  _syscall()  nevytvai  prototyp.  Musite si jej vytvoit, co plati
       hlavn pro C++.

       Systemova volani  nemusi  vracet  kladne  nebo  zaporne  chybove  kody.
       Musite  si  peist  jejich  zdrojovy  text, abyste se ujistili, co mohou
       vratit.  Obvykle je to opana hodnota  standardni  chyby,  nap.  -EPERM.
       Makra  _syscall() vraci hodnotu r systemoveho volani , je-li nezaporna,
       jinak vraci -1 a nastavi hodnotu errno na -r.

       Nktera systemova volani, jako nap.  mmap, poaduji vice ne pt  argument.
       Toto  se  obchazi  umistnim  argument  na  vrchol zasobniku. Potom jako
       argument volani pouijeme ukazatel na blok argument.

       Pi definici volani  jadra  MUSI  byt  argumenty  volany  hodnotou  nebo
       odkazem (pro struktury).

SOUBORY

       /usr/include/linux/unistd.h

AUTOI

       Autory  a  podminky  pro  ieni  a  kopirovani  najdete  v  zahlavi kade
       manualove stranky. Vimnte si, e se mohou stranku od stranky liit.

VAROV'AN'I

       Peklad  je  pravdpodobn  zastaraly.  Pokud   chcete   pomoci   s   jeho
       aktualizaci, zamite na http://man-pages-cs-wiki.homelinux.net/

Linux 1.2.13                     18.ledna 1997                         UVOD(2)