.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), .\" Fri Apr 2 11:32:09 MET DST 1993 .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, see .\" . .\" %%%LICENSE_END .\" .\" Tue Jul 6 12:42:46 MDT 1993 .\" Added "Calling Directly" and supporting paragraphs .\" .\" Modified Sat Jul 24 15:19:12 1993 by Rik Faith .\" .\" Modified 21 Aug 1994 by Michael Chastain : .\" Added explanation of arg stacking when 6 or more args. .\" .\" Modified 10 June 1995 by Andries Brouwer .\" .\" 2007-10-23 mtk: created as a new page, by taking the content .\" specific to the _syscall() macros from intro(2). .\" .\" Tradotto da man-pages-2.68 da Elisabetta Galli .\" novembre 2007 .\" Aggiornamento a man-pages-3.53 di Marco Curreli .\" agosto 2013 (formattazione + modif. riga 130 [argomenti/tipi di argomento]) .TH _SYSCALL 2 2007-12-19 "Linux" "Linux Programmer's Manual" .SH NOME _syscall \- invoca una chiamata di sistema senza supporto di libreria (OBSOLETO) .SH SINTASSI .B #include Una macro _syscall la chiamata di sistema desiderata .SH 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: .sp .RS .RI _syscall X ( tipo , nome , tipo1 , arg1 , tipo2 , arg2 ,...) .RE .PP dove .IP .I X è tra 0 e 6, che sono il numero di argomenti presi dalla chiamata di sistema .IP .I tipo è il tipo di ritorno della chiamata di sistema .IP .I nome è il nome della chiamata di sistema .IP .I tipoN è il tipo dell'N-esimo argomento .IP .I argN è il nome dell'N-esimo argomento .PP Queste macro creano una funzione chiamata .I nome con gli argomenti specificati. Una volta inclusa la _syscall() nel proprio file sorgente, si può chiamare la chiamata di sistema con .IR nome . .SH FILE .I /usr/include/linux/unistd.h .SH CONFORME A L'uso di queste macro è specifico di Linux, ed è deprecato. .SH 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 .BR 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 .BR syscall (2)). Le macro _syscall() .I "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 .RI \- EPERM . Le macro _syscall() restituiranno il risultato .I r della chiamata di sistema quando .I r è non-negativo, ma restituiranno \-1 e imposteranno la variabile .I errno a .RI r quando .I r è negativo. Per i codici di errore si veda .BR errno (3). Quando si definisce una chiamata di sistema, i tipi di argomento .I devono essere passati per valore o per puntatore (per gli aggregati come le strutture). .\" Il modo migliore di invocare chiamate di sistema che glibc ancora non .\" conosce è attraverso .\" .BR syscall (2). .\" Tuttavia questo meccanismo può essere usato solo se si usa una libc .\" (come glibc) che supporta .\" .BR syscall (2), .\" e se il file header .\" .I .\" contiene la definizione SYS_foo necessaria. .\" Altrimenti è necessario l'uso di una macro _syscall. .\" .SH ESEMPIO .nf #include #include #include #include /* per cose relative alle macro _syscallX */ #include /* 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); } .fi .SS Esempio di Output .nf 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 .fi .SH VEDERE ANCHE .BR intro (2), .BR syscall (2), .BR errno (3) .SH COLOPHON Questa pagina fa parte del rilascio 3.73 del progetto Linux .IR man-pages . Una descrizione del progetto, le istruzioni per la segnalazione degli errori, e l'ultima versione di questa pagina si trova su \%http://www.kernel.org/doc/man\-pages/. La versione italiana fa parte del pacchetto .I man-pages-it v. 3.73, a cura di: ILDP "Italian Linux Documentation Project" \%http://www.pluto.it/ildp .br Per la traduzione in italiano si pu\(`o fare riferimento a http://www.pluto.it/ildp/collaborare/ .br Segnalare eventuali errori di traduzione a .IR ildp@pluto.it