PHP - Función fcntl () de E / S directa

La función dio_fcntl () puede realizar una función fcntl de la biblioteca c en el descriptor fd.

Sintaxis

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

La función dio_fcntl () puede realizar las operaciones especificadas por el parámetro "cmd" con un descriptor de archivo fd, y algunos comandos requieren argumentos "args" adicionales.

Un arg es una matriz asociativa cuando cmd se establece en F_SETLK o F_SETLLW con las siguientes claves: "inicio" es la mezcla donde comienza un bloqueo, "longitud" es el tamaño de un área bloqueada. cero significa el final de un archivo, "wenth" es donde se refiere a l_start: tal vez SEEK_SET, SEEK_END y SEEK_CUR, y "type" es un tipo de bloqueo: puede ser F_RDLCK (bloqueo de lectura), F_WRLCK (bloqueo de escritura), o F_UNLCK (desbloquear).

El cmd puede ser una de las siguientes operaciones:

  • F_SETLK- El bloqueo está activado o desactivado. Si alguien más mantiene un bloqueo, la función dio_fcntl () puede devolver -1.

  • F_SETLKW - Es similar a F_SETLK, pero en el caso de que otra persona mantenga un bloqueo, la función dio_fcntl () puede esperar hasta que se libere el bloqueo.

  • F_GETLK- La función dio_fcntl () puede devolver una matriz asociativa si alguien más evita el bloqueo. Si no hay obstáculos, la tecla "tipo" se puede configurar con F_UNLCK.

  • F_DUPFD - Encuentra el descriptor de archivo numerado más pequeño, mayor o igual que arg, y puede devolverlo.

Ejemplo

<?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);
?>