intro

Autres langues

Langue: it

Version: 22 maggio 1996 (openSuse - 09/10/07)

Section: 2 (Appels système)

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!