Man page - _syscall(2)

Packages contains this manual

Available languages:

en fr it ja ru ro

Manual

_syscall

NOME
SINTASSI
DESCRIZIONE
FILE
CONFORME A
STORIA
NOTE
ESEMPI
Esempio di Output
VEDERE ANCHE
TRADUZIONE

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:

_syscall X ( tipo , nome , tipo1 , arg1 , tipo2 , arg2 ,...)

dove

X è nell’intervallo 0–6, che è 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

Linux.

STORIA

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)).

NOTE

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, i tipi di argomento devono essere passati per valore o per puntatore (per gli aggregati come le strutture).

ESEMPI

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/unistd.h> /* per macro e altro relativo a _syscallX */
#include <linux/kernel.h> /* per struct sysinfo */
_syscall1(int, sysinfo, struct sysinfo *, info);
int
main(void)
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("codice errore = %d\n", error);
printf("Uptime = %lds\nCarico: 1 min %lu / 5 min %lu / 15 min %lu\n"
"RAM: totale %lu / libera %lu / condivisa %lu\n"
"Memoria in buffer = %lu\nSwap: totale %lu / libera %lu\n"
"Numero di processi = %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

codice errore = 0
uptime = 502034s
Carico: 1 min 13376 / 5 min 5504 / 15 min 1152
RAM: totale 15343616 / libera 827392 / condivisa 8237056
Memoria in buffer = 5066752
Swap: totale 27881472 / libera 24698880
Numero di processi = 40

VEDERE ANCHE

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

TRADUZIONE

La traduzione italiana di questa pagina di manuale è stata creata da Elisabetta Galli <lab@kkk.it>, Marco Curreli <marcocurreli@tiscali.it> e Giuseppe Sacco <eppesuig@debian.org>

Questa traduzione è documentazione libera; leggere la GNU General Public License Versione 3 o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità.

Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a pluto-ildp@lists.pluto.it .