_syscall

_SYSCALL(2)            Manuale del programmatore di Linux            _SYSCALL(2)



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, 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 cose relative alle macro _syscallX */
       #include <linux/kernel.h>       /* per sysinfo struct */

       _syscall1(int, sysinfo, struct sysinfo *, info);

       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 5.13 del progetto Linux man-pages.
       Una descrizione del progetto, le istruzioni per la segnalazione degli
       errori, e l'ultima versione di questa pagina si trovano su
       https://www.kernel.org/doc/man-pages/.


TRADUZIONE
       La traduzione italiana di questa pagina di manuale è stata creata da
       Elisabetta Galli <lab@kkk.it> e Marco Curreli <marcocurreli@tiscali.it>

       Questa traduzione è documentazione libera; leggere la GNU General Public
       License Versione 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨⟩.



Linux                             22 marzo 2021                      _SYSCALL(2)