Interface pro nektere funkce MM:
(by Marcel Kruzel)
Popis hlavicky: mm.h (a cisla funkci).
0)errno...pro vsechny funkce systemu?(nebo alespon MM?)
#define MM_ERRORNO m1_i1
1)EXIT: ( vstup: char exit_status )
#define MM_EXITSTATUS m1_i1
( vystup: nic )
2) FORK: ( vstup: nic (pid stepeneho procesu doda kernel))
( vystup: pid noveho detskeho procesu a errno)
#define MM_FORKEDCHILD m1_i2
3) WAITPID: ( vstup:pid na koho cekat, options)
#define MM_WAITFOR m1_i1
#define MM_WAITOPT m1_i2
( vystup: navratovy kod ukonceneho procesu a "terminate status" + proces id,ktery skoncil a errno)
#define MM_EXITVALUE m1_i2 ... dolni byte obsahuje exitstatus, horni obsahuje termination status. Pro ziskani EXITSTATUS (Parametr exit): msg.MM_EXITVALUE&255. (resp. pouzit union).
#define MM_EXITEDPID m1_i3
4.1) GETUID, GETGID (vstup:pid procesu, na ktery se dotazujeme)
#define MM_GETIDPID m1_i1 (==0 svuj)
(vystup:
pro UID: efektivni i realne,
#define MM_RUID m1_i2
#define MM_EUID m1_i3
pro GID:efektivni i realne.
#define MM_RGID m1_i2
#define MM_EGID m1_i3
4.1.1) GETPID (nic .. mohu se ptat pouze na svuj pid ).
(vystup: pid a errno).
#define MM_GPID m1_i2
4.1) SETUID,SETGID (vstup:na co zmenit UID(resp. GID) zadajiciho procesu)
Efektivni UID procesu zadajiciho o zmenu musi byt SUPER_USER:
#define MM_SUID m1_i1
(resp. #define MM_SGID m1_i1)
(vystup: errno).
4.2) SETPGRP (vstup: kteremu procesu menit GROUP a na jakou hodnotu)
Efektivni UID procesu zadajiciho o zmenu musi byt SUPER_USER, nebo stejny jako procesu, jehoz GROUP chceme zmenit, nebo musi byt rodicem dotycneho procesu!!!!
#define MM_SPGRPPID m1_i1 // afektovany process (==0 .. zadajici process)
#define MM_SPGRPVALUE m1_i2 // nova hodnota GROUP
(vystup: errno)
4.3) GETPGRP (vstup: ktereho procesu GROUP Vas zajima)
#define MM_GPGRPPID m1_i1(==0 .. zadajici proces ).
(vystup: GROUP a errno)
#define MM_PGRP m1_i2
5) BREAK: ( vstup: relativni adresa o kolik posunout hranici gapu (nahoru nebo dolu))
#define MM_BRKINCR m1_i1
( vystup: errno a adresa kde je konec allokovatelne casti (od zacatku zjisteneho prvnim volanim break funkce))
#define MM_BRKADDR m1_p1
6) EXEC: ( vstup: ukazatel na predvytvoreny zasobnik a jeho velikost.)
#define MM_EXECSTACK m1_p1
#define MM_EXECSIZE m1_i1
( vystup: errno)
7) GETMPROC: (vstup: ukazatel na misto v pameti procesu (DATA), kde zkopirovat tabulku MPROC, a OPTIONS)
#define MM_GETMPROCPTR m1_p1
#define MM_GETMPROCOPT m1_i1 ......... (MPROCCPY .. kopiruj, nebo MPROCSIZE .. velikost tabulky MPROC v bajtech).
Tato sluzba bude vyuzita procesem ps. Prozatim se neuvazuje nutnost mit SUPER_USER efektivni prava pro volani teto sluzby.
(vystup: velikost tabulky mproc (MM_GETMPROCOPT==MPROCSIZE) a errno)
#define MM_GETMPROCSIZE m1_i2
( vystup: errno)
8) SIGNAL: (vstup: cislo signalu (viz definice v signal.h ) a co se ma nastavit: SIG_IGN, SIG_DFL nebo ukazatel na uzivatelskou fci)
#define MM_SIGNAL m6_i1
#define MM_PTRFUNC m6_f1
9) KILL: (vstup: ID procesu, cislo signalu)
#define MM_PID m6_i2
#define MM_SIGNAL m6_i1
10) ALARM: (vstup: pocet sekund do prichodu alarmu)
#define MM_ALARMSECOND m6_i1
11) PAUSE: (zadny vstup)
Chybove kody pro jednotlive funkce: merror.h.
TO BE Continued...