Rechercher une page de manuel
intro
Langue: it
Version: 22 maggio 1996 (openSuse - 09/10/07)
Section: 2 (Appels système)
NOME
intro - Introduzione alle chiamate di sistemaDESCRIZIONE
Questo capitolo descrive le chiamate di sistema (system call) di Linux. Per un elenco delle 164 chiamate di sistema in Linux 2.0, si veda syscalls(2).Chiamata diretta
In molti casi, non è necessario invocare direttamente una system call, ma alcune volte la libreria C Standard non implementa una funzione che soddisfa le proprie necessità.Sintassi
#include <linux/unistd.h>Una macro _syscall
la system call desiderata
Setup
La cosa importante da sapere sulle system call è il loro prototipo. Bisogna conoscere il numero di argomenti, il loro tipo, e il tipo di ritorno della funzione. Ci sono sei macro che rendono più facile la reale chiamata nel sistema. Hanno il formato:- _syscallX(tipo,nome,tipo1,arg1,tipo2,arg2,...)
-
-
- Dove X è tra 0 e 5, che sono il numero di argomenti presi dalla system call
- tipo è il tipo di ritorno della system call
- nome è il nome della system call
- tipoN è il tipo dell'N-esimo argomento
- argN è il nome dell'N-esimo argomento
-
- Queste macro creano una funzione chiamata nome con gli argomenti specificati. Una volta che si è inclusa la _syscall() nel proprio file sorgente, si può chiamare la system call con name.
ESEMPIO
#include <stdio.h> #include <linux/unistd.h> /* for _syscallX macros/related stuff */ #include <linux/kernel.h> /* for struct sysinfo */ _syscall1(int, sysinfo, struct sysinfo *, info); /* Nota: se si copia direttamente dal sorgente nroff, ricordarsi di TOGLIERE i caratteri `/' in più nell'espressione di printf. */ int main(void) { struct sysinfo s_info; int error; error = sysinfo(&s_info); printf("code error = %d\n", error); printf("Uptime = %ds\nLoad: 1 min %d / 5 min %d / 15 min %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); }
Esempio di Output
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
NOTE
La macro _syscall() NON produce un prototipo. macros DO NOT produce a prototype. Occorrerà quindi creare un prototipo, specialmente per i programmatori C++.Le chiamate di sistema non devono per forza ritornare un valore positivo o un codice di errore negativo. Occorrerà leggere il sorgente per essere sicuri di come ognuna di esse riporta gli errori. Solitamente, il valore di ritorno è il negato di un codice di errore standardizzato, come -EPERM. Le macro _syscall() ritorneranno il risultato r della chiamata di sistema quando r è non-negativo, ma ritorneranno -1 e assegneranno ad errno il valore r quando r è negativo.
Alcune chiamate di sistema, come mmap, richiedono più di cinque argomenti. Questi vengono gestiti spingendo gli argomenti sullo stack e passando alla chiamata di sistema un puntatore al blocco degli argomenti.
Quando si definisce una chiamata di sistema, gli argomenti DEVONO essere passati per valore o per puntatore (questo nel caso di aggregati, come le strutture).
STANDARD
Alcuni codici vengono usati per indicare varianti di Unix e standard ai quali le chiamate descritte in questa sezione si adeguano. Questi sono:- SVr4
- System V Release 4 Unix, come descritto nel "Programmer's Reference Manual: Operating System API (Intel processors)" (Prentice-Hall 1992, ISBN 0-13-951294-2)
- SVID System V Interface Definition, come descritto in "The System V
- Interface Definition, Fourth Edition", disponibile in rete in formato Postscript presso ftp://ftp.fpk.novell.com/pub/unix-standards/svid.
- POSIX.1 IEEE 1003.1-1990 part 1, anche chiamato ISO/IEC 9945-1:1990s,
- anche chiamato "IEEE Portable Operating System Interface for Computing Environments", come descritto in "POSIX Programmer's Guide" di Donald Lewine (O'Reilly & Associates, Inc., 1991, ISBN 0-937175-73-0.
- POSIX.1b IEEE Std 1003.1b-1993 (POSIX.1b standard), che descrive le
- capacità real-time per i sistemi operativi portabili, anche chiamato ISO/IEC 9945-1:1996, come descritto in "Programming for the real world - POSIX.4" di Bill O. Gallmeister (O'Reilly & Associates, Inc. ISBN 1-56592-074-0).
- 4.3BSD/4.4BSD
- Le distribuzioni 4.3 e 4.4 dello Unix di Berkeley. 4.4BSD è mantiene la compatibilità con il 4.3.
- V7
- Version 7, la versione ancestrale di Unix dei laboratori Bell.
FILE
/usr/include/linux/unistd.hAUTORI
Si vedano le intestazioni delle pagine di manuale per l'autore(i) e le condizioni di copyright. Si noti che questi possono differire da pagina a pagina!Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre