|
|||||||
|
|
INTROSection: Linux Programmer's Manual (2)Updated: 22 maggio 1996 Index Return to Main Contents NOMEintro - Introduzione alle chiamate di sistemaDESCRIZIONEQuesto 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 direttaIn 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 SetupLa 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:
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 Outputcode 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 NOTELa 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). STANDARDAlcuni codici vengono usati per indicare varianti di Unix e standard ai quali le chiamate descritte in questa sezione si adeguano. Questi sono:
FILE/usr/include/linux/unistd.hAUTORISi 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!
Index | ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright. 1999-2009 Linuxinfor.com. No rights reserved. |