indietro

  • syscall NUMERO,LISTA

    Invoca la chiamata di sistema specificata come primo elemento della lsta, passando i rimanenti elementi come argomenti alla chiamata di sistema. Se non implementata, produce un errore bloccante. Gli argomenti sono interpretati come segue: se un dato argomento è numerico, l'argomento è passato come un intero. Se non lo è, viene passato il puntatore al valore della stringa. Siete responsabili nell'assicurarvi che una stringa sia sia estesa in anticipo in misura tale da ricevere qualunque risultato che possa essere scritto in una stringa. Non potete utilizzare una stringa letterale (o altre stringhe di sola lettura) come argomento di syscall perché il Perl deve assumere che ogni puntatore a stringa possa essere scritto dall'inizio alla fine. Se gli argomenti numerici non sono letterali e non sono mai stati interpretati in un contesto numerico, si rende necessario sommare ad essi 0 per forzarli nell'apparire come numeri. Quanto segue emula la funzione syswrite (o viceversa):

        require 'syscall.ph'; # potrebbe essere necessario eseguire h2ph
        $s = "ehila`\n";
        syscall(&SYS_write, fileno(STDOUT), $s, length $s);

    Va notato che il Perl supporta il passaggio fino ad un massimo di 14 argomenti per la vostra chiamata di sistema, che in pratica di solito dovrebbe essere sufficiente.

    Syscall restituisce qualunque valore sia stato restituito dalla chiamata di sistema che essa ha invocato. Se la chiamata di sistema fallice, syscall restituisce -1 ed imposta $! (errno). Va notato che alcune chiamate di sistema possono legittimamente restituire -1. La maniera approrpiata per gestire tali chiamate è quella di assegnare $!=0; prima della chiamata e controllare il valore di $! se syscall restituisce -1.

    C'è un problema con syscall(&SYS_pipe): essa restituisce il numero di file dell'estremità in lettura della pipe che ha creato. Non c'è alcun modo per recuperare il numero di file dell'altro capo. Si può evitare questo problema utilizzando piuttosto pipe.