_SYSCALL

Section: 2007 (2)
Updated: 19
Index Return to Main Contents
 

NOME

_syscall - invoca una chiamata di sistema senza supporto di libreria (OBSOLETO)  

SINTASSI

#include <linux/unistd.h>

Una macro _syscall

la chiamata di sistema desiderata  

DESCRIZIONE

La cosa importante da sapere sulle chiamate di sistema è il loro prototipo. Bisogna conoscere il numero di argomenti, il loro tipo, e il tipo di ritorno della funzione. Ci sono sette 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 6, che sono il numero di argomenti presi dalla chiamata di sistema
tipo è il tipo di ritorno della chiamata di sistema
nome è il nome della chiamata di sistema
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 inclusa la _syscall() nel proprio file sorgente, si può chiamare la chiamata di sistema con nome.  

FILE

/usr/include/linux/unistd.h  

CONFORME A

L'uso di queste macro è specifico di Linux, ed è deprecato.  

NOTE

A partire dal kernel 2.6.18 le macro di _syscall sono state rimosse dai file di intestazione messi a disposizione nello spazio utente. Si usi syscall(2) al loro posto. (Alcune architetture, in particolare la ia64, non ha mai messo a disposizione le macro _syscall: su queste architetture è sempre stato richiesto syscall(2)).

Le macro _syscall() non producono un prototipo. Occorrerà quindi crearne uno, specialmente per chi usa C++.

Le chiamate di sistema non devono per forza restituire solo codici di errore positivi o negativi. 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 standard, per esempio -EPERM. Le macro _syscall() restituiranno il risultato r della chiamata di sistema quando r è non-negativo, ma restituiranno -1 e imposteranno la variabile errno a -r quando r è negativo. Per i codici di errore si veda errno(3).

Quando si definisce una chiamata di sistema, gli argomenti DEVONO essere passati per valore o per puntatore (per gli aggregati come le strutture).  

ESEMPIO

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/unistd.h>       /* per cose relative alle macro _syscallX */
#include <linux/kernel.h>       /* per sysinfo struct */

_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 = %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);
}
 

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
 

VEDERE ANCHE

intro(2), syscall(2), errno(3)  

COLOPHON

Questa pagina fa parte del rilascio 2.75 del progetto man-pages di Linux. Si può trovare una descrizione del progetto, e informazioni su come riportare bachi, presso http://www.kernel.org/doc/man-pages/. Per la traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/


 

Index

NOME
SINTASSI
DESCRIZIONE
FILE
CONFORME A
NOTE
ESEMPIO
Esempio di Output
VEDERE ANCHE
COLOPHON

This document was created by man2html, using the manual pages.
Time: 23:03:51 GMT, June 17, 2008