Provided by:
manpages-cs_0.18.20090209-3_all 
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)