PHP 直接I/O fcntl()函数

PHP 直接I/O fcntl()函数

dio_fcntl()函数可以在fd描述符上执行c库的fcntl函数。

语法

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

dio_fcntl()函数可以用”cmd”参数在文件描述符fd上执行指定的操作,某些命令需要额外的”args”参数。

当cmd设置为F_SETLK或F_SETLLW时,args可以是一个关联数组,包含以下键:”start”是锁开始的位置,”length”是锁定区域的大小,0表示文件结束,”wenth”是指向l_start的位置,可以是SEEK_SET,SEEK_END和SEEK_CUR,”type”是锁的类型:可以是F_RDLCK(读锁),F_WRLCK(写锁)或F_UNLCK(解锁)。

cmd可以是以下操作之一−

  • F_SETLK −设置或清除锁定。如果锁被其他进程持有,dio_fcntl()函数可能会返回-1。

  • F_SETLKW −与F_SETLK类似,但在锁被其他进程持有时,dio_fcntl()函数可能会等待锁释放。

  • F_GETLK −如果有其他进程阻止锁定,dio_fcntl()函数可以返回一个关联数组。如果没有障碍,”type”键可以由F_UNLCK设置。

  • F_DUPFD −找到大于或等于arg的最小编号的文件描述符,并返回它。

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程