INTRO(2)

NOME
intro - Introduzione alle chiamate di sistema

DESCRIZIONE
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.h

AUTORI
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!