_syscall(2) System Calls Manual _syscall(2) NUME _syscall - invocarea unui apel de sistem fara suport de biblioteca (IEIT DIN UZ) SINOPSIS #include O macrocomanda _syscall apelul de sistem dorit DESCRIERE Ceea ce este important de tiut despre un apel de sistem este prototipul acestuia. Trebuie sa tii cate argumente, tipurile acestora i tipul de returnare al funciei. Exista apte macrocomenzi care uureaza apelul propriu-zis in sistem. Acestea au forma: _syscallX(type,name,type1,arg1,type2,arg2,...) unde: X este 0-6, care reprezinta numarul de argumente luate de apelul de sistem type este tipul de returnare al apelului de sistem name este numele apelului de sistem typeN este tipul celui de-al N-lea argument argN este numele celui de-al N-lea argument Aceste macrocomenzi creeaza o funcie numita name cu argumentele pe care le specificai. Odata ce includei _syscall() in fiierul sursa, apelai apelul de sistem prin name. FIIERE /usr/include/linux/unistd.h STANDARDE Linux. ISTORIC Incepand cu Linux 2.6.18, macrocomenzile _syscall au fost eliminate din fiierele de antet furnizate in spaiul utilizatorului. Utilizai in schimb syscall(2); (unele arhitecturi, in special ia64, nu au furnizat niciodata macrocomenzile _syscall; pe acele arhitecturi, syscall(2) a fost intotdeauna necesar). NOTE Macrocomenzile _syscall() nu produc un prototip. Este posibil sa trebuiasca sa creai unul, in special pentru utilizatorii de C++. Apelurile de sistem nu sunt obligate sa returneze numai coduri de eroare pozitive sau negative. Trebuie sa citii sursa pentru a fi siguri de modul in care va returna erorile. De obicei, este vorba de negativul unui cod de eroare standard, de exemplu, -EPERM. Macrocomenzile _syscall() vor returna rezultatul r al apelului de sistem atunci cand r este nenegativ, dar vor returna -1 i vor stabili variabila errno la -r atunci cand r este negativ. Pentru codurile de eroare, a se vedea errno(3). Atunci cand se definete un apel de sistem, tipurile de argumente trebuie sa fie transmise prin-valoare sau prin-indicator (pentru agregate precum structurile). EXEMPLE #include #include #include #include /* pentru macrocomenzi/lucruri conexe _syscallX */ #include /* pentru structura sysinfo */ _syscall1(int, sysinfo, struct sysinfo *, info); int main(void) { struct sysinfo s_info; int error; error = sysinfo(&s_info); printf("code error = %d\n", error); printf("Uptime = %lds\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\n" "RAM: total %lu / free %lu / shared %lu\n" "Memory in buffers = %lu\nSwap: total %lu / free %lu\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); exit(EXIT_SUCCESS); } Exemplu de ieire code error = 0 uptime = 502034s Load: 1 min 13376 / 5 min 5504 / 15 min 1152 RAM: total 15343616 / free 827392 / shared 8237056 Memory in buffers = 5066752 Swap: total 27881472 / free 24698880 Number of processes = 40 CONSULTAI I intro(2), syscall(2), errno(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 _syscall(2)