|
INTRO(2) manual page
Table of Contents
intro - Introduzione alle chiamate di sistema
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)
.
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à.
#include <linux/unistd.h>
Una macro _syscall
la system call desiderata
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 .
#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);
}
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
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).
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.
/usr/include/linux/unistd.h
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!
Table of Contents
|