fcntl FILEHANDLE,FUNZIONE,SCALARE
Implementa la funzione fcntl(2). Probabilmente prima dovrete dichiarare
use Fcntl;
per ottenere le giuste definzioni delle costanti.
Il trattamento degli argomenti e la restituzione di
valore funziona come nella ioctl più sotto.
Per esempio:
use Fcntl;
fcntl($filehandle, F_GETFL, $packed_return_buffer)
or die "impossibile eseguire fcntl F_GETFL: $!";
No dovete controllare il valore restituito da fnctl con defined.
Come ioctl, esso mappa uno 0 restituito dalla chiamata di
sistema in uno "0 ma vero" in Perl. Questa stringa è vera
in un contesto booleano e 0 in un contesto numerico. Essa viene anche
esonerata dal normale warning -w su una impropria conversione numerica.
Va notato che fcntl produrrà un errore bloccante se usata
su un elaboratore che non implementa fcntl(2). Consultate il modulo Fcntl
o la manpage di fcntl(2) per sapere quali funzioni sono disponibili sul
vostro sistema.
Ecco un esempio dell'impostazione di un filehandle chiamato REMOTE ad
essere non bloccante a livello di sistema. Dovete tuttavia negoziare $|
voi stessi.
use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
$flag = fcntl(REMOTE, F_GETFL, 0)
or die "Impossibile ottenere i flag per il socket: $!\n";
$flag = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
or die "Impossibile impostare i flag per il socket: $!\n";