dio_fcntl

(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)

dio_fcntlEsegue la funzione C fcntl su un descrittore di file

Descrizione

dio_fcntl(resource $fd, int $cmd, mixed $args = ?): mixed

La funzione dio_fcntl() esegue le operazioni specificate dal parametro cmd sul descrittore di file fd. Qualora i comandi richiedano informazioni addizionali occorre valorizzare args con tali informazioni.

Nota: Questa funzione non è implementata sulle piattaforme Windows.

Elenco dei parametri

fd

Descrittore di file restituito da dio_open().

cmd

Può indicare una delle seguenti operazioni:

  • F_SETLK - imposta o azzera un lock. Se il lock è impostato da un'altro processo la funzione dio_fcntl() restituisce -1.

  • F_SETLKW - come F_SETLK, ma nel caso in cui il lock sia impostato da un'altro processo la funzione dio_fcntl() attende sino a quando il blocco non viene rimosso.

  • F_GETLK - la dio_fcntl() restituisce un array associativo (come descritto precedentemente) se qualche altro processo impedisce il lock. Se non vi sono problemi la chiave "type" sarà impostata a F_UNLCK.

  • F_DUPFD - trova il più piccolo numero di descrittore di file disponibile che sia maggiore o uguale rispetto ad args e lo restituisce.

  • F_SETFL - Imposta i flag del descrittore di file al valore specificato da args. Tale valore può essere O_APPEND, O_NONBLOCK oppure O_ASYNC. Per utilizzare O_ASYNC occorre utilizzare l'estensione PCNTL.

args

Il parametro args è un array associativo, nei casi in cui cmd è impostato a F_SETLK oppure a F_SETLLW, contiene le seguenti chiavi:

  • "start" - offset da cui comincia il lock

  • "length" - dimensione dell'area bloccata, zero significa fine file

  • "wenth" - a cosa l_start è relativo: può valere SEEK_SET, SEEK_END o SEEK_CUR

  • "type" - tipo di lock: può essere F_RDLCK (lock in lettura), F_WRLCK (lock in scrittura) oppure F_UNLCK (rimozione del lock)

Valori restituiti

Restituisce il valore della chiamata C.

Esempi

Example #1 Impostare e cancellare un lock

<?php

$fd
= dio_open('/dev/ttyS0', O_RDWR);

if (
dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// the file descriptor appears locked
echo "The lock can not be cleared. It is held by someone else.";
} else {
echo
"Lock succesfully set/cleared";
}

dio_close($fd);
?>

add a note add a note

User Contributed Notes 1 note

up
-8
Guillermo Prandi
11 years ago
Actually, there's a small typo in the above docs. The parameter for where l_start is relative to is actually "whence" and not "wenth" like stated.
To Top