PHP - Fonction d'E / S directes fcntl ()

La fonction dio_fcntl () peut exécuter une fonction fcntl de la c-library sur le descripteur fd.

Syntaxe

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

La fonction dio_fcntl () peut effectuer les opérations spécifiées par le paramètre "cmd" avec un descripteur de fichier fd, et certaines commandes nécessitent des arguments "args" supplémentaires.

Un arg est un tableau associatif lorsque cmd est défini sur F_SETLK ou F_SETLLW avec les clés suivantes: "start" est le mixage où un verrou commence, "length" est la taille d'une zone verrouillée. zéro signifie la fin d'un fichier, "goh" est l'endroit où il fait référence à l_start: peut-être SEEK_SET, SEEK_END et SEEK_CUR, et "type" est un type de verrou: peut être F_RDLCK (verrou de lecture), F_WRLCK (verrou d'écriture), ou F_UNLCK (déverrouiller).

La cmd peut être l'une des opérations suivantes -

  • F_SETLK- Le verrou est activé ou désactivé. Si un verrou est détenu par quelqu'un d'autre, la fonction dio_fcntl () peut renvoyer -1.

  • F_SETLKW - C'est similaire à F_SETLK, mais dans le cas où un verrou est détenu par quelqu'un d'autre, la fonction dio_fcntl () peut attendre que le verrou soit libéré.

  • F_GETLK- La fonction dio_fcntl () peut renvoyer un tableau associatif si quelqu'un d'autre empêche le verrouillage. S'il n'y a pas d'obstacles, la clé "type" peut être définie par F_UNLCK.

  • F_DUPFD - Recherche le plus petit descripteur de fichier numéroté supérieur ou égal à arg et peut le renvoyer.

Exemple

<?php
   $fd = dio_open("/dev/ttyS0", O_RDWR);

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