dio_fcntl

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

dio_fcntl — Exécute une fonction fichier de langage C

Description

mixed dio_fcntl ( resource $fd, int $cmd [, mixed $args] )

dio_fcntl() exécute l'opération cmd sur le fichier représenté par la ressource fd . Certaines commandes demandent des arguments supplémentaires qui sont fournis dans l'argument args .

Note: Cette fonction n'est pas implémentée sous Windows.

Liste de paramètres

fd

La ressource de fichier retournée par dio_open() .

cmd

Peut être une de ces opérations suivantes :

  • F_SETLK - Le verrou est posé ou levé. Si le verrou appartient à un autre utilisateur, dio_fcntl() retourne -1.

  • F_SETLKW - identique à F_SETLK , mais si le verrou appartient à quelqu'un d'autre, dio_fcntl() attend la levée du verrou.

  • F_GETLK - dio_fcntl() retourne un tableau associatif (comme décrit ci-dessus) si un autre utilisateur empêche la poste d'un verrou. S'il n'y a aucun empêchement, l'entrée "type" prendra la valeur F_UNLCK .

  • F_DUPFD - trouve les numéros de ressource de fichier les plus petits, disponibles, inférieurs ou égales à args et les retourne.

  • F_SETFL - Configure les descripteurs de fichier à la valeur spécifiée par args , qui peut être O_APPEND , O_NONBLOCK ou O_ASYNC . Pour utiliser O_ASYNC vous aurez besoin de l'extension PCNTL .

args

args est un tableau associatif lorsque cmd vaut F_SETLK ou F_SETLLW , avec les entrées suivantes :

  • "start" - offset de début de verrou

  • "length" - taille de la surface verrouillée. Zéro indique la fin du fichier

  • "wenth" - l_start est relatif à : peut être SEEK_SET , SEEK_END et SEEK_CUR

  • "type" - type de verrou : peut être F_RDLCK (verrou en lecture), F_WRLCK (verrou en écriture) ou F_UNLCK (déverrouillage)

Valeurs de retour

Retourne le résultat d'un appel en C.

Exemples

Exemple 642. Positionnement et suppression d'un verrou

<?php

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

if (
dio_fcntl ( $fd F_SETLK , Array( "type" => F_WRLCK )) == - 1 ) {
   
// le descripteur de fichier semble verrouillé
   
echo  "Le verrou n'a pu être effacé. Il a été posé par quelqu'un d'autre." ;
} else {
   echo 
"Le verrou a été défini/verrouillé avec succès" ;
}

dio_close ( $fd );
?>