Implementa la funzione di sistema ioctl(2). Probabilmente dovrete prima scrivere:
require "sys/ioctl.ph"; # probabilmente in $Config{archlib}/sys/ioctl.ph
per ottenere le corrette definizioni delle funzioni. Se sys/ioctl.ph
non esiste oppure non contiene le corrette definizioni, dovrete
scrivervele da soli, basandovi sui file header in C, come ad esempio
<sys/ioctl.h>. (C'è uno script Perl chiamato h2ph,
fornito assieme al kit Perl, che potrebbe aiutarvi in questo, ma la cosa
non è così banale). SCALARE verrà letto e/o scritto a seconda
della FUNZIONE, un puntatore al valore della stringa contenuta in
SCALARE verrà passato come terzo argomento della reale chiamata
a ioctl. (Se SCALARE non ha un valore di stringa ma ne ha uno
numerico, verrà passato direttamente tale valore anziché
un puntatore al valore della stringa. Per garantire che ciò
avvenga, aggiungete uno 0 allo scalare prima di utilizzarlo).
Potrebbe risultare necessario ricorrere alle funzioni pack e
unpack per manipolare i valori delle strutture utilizzate da
ioctl.
Il valore restituito da ioctl (e fnctl) è di seguito
descritto:
se l'SO restituisce: allora Perl restituisce:
1 valore indefinito
0 stringa "0 ma vera"
qualsiasi altra cosa quel numero
Dunque, Perl restituisce vero in caso di successo e falso in caso di fallimento. In ogni caso potete determinare facilmente il reale valore restituito dal sistema operativo:
$valorerit = ioctl(...) || -1;
printf "Il sistema ha restituito %d\n", $valorerit;
La stringa speciale "0 ma vero" non risente delle proteste
di -w sulla conversione impropria dei numeri.