PHP Conference Japan 2024

dio_fcntl

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

dio_fcntl对 fd 执行 c 库 fcntl

描述

dio_fcntl(资源 $fd, 整数 $cmd, 混合 $args = ?): 混合

dio_fcntl() 函数对文件描述符 fd 执行由 cmd 指定的操作。某些命令需要提供额外的参数 args

参数

fd

dio_open() 返回的文件描述符。

cmd

可以是以下操作之一

  • F_SETLK - 设置或清除锁。如果锁被其他人持有,dio_fcntl() 返回 -1。

  • F_SETLKW - 与 F_SETLK 类似,但如果锁被其他人持有,dio_fcntl() 会等待锁释放。

  • F_GETLK - 如果其他人阻止锁,dio_fcntl() 返回一个关联数组(如下所述)。如果没有障碍,键“type”将设置为 F_UNLCK

  • F_DUPFD - 查找大于或等于 args 的最低可用文件描述符,并返回它们。

  • F_SETFL - 将文件描述符的标志设置为由 args 指定的值,该值可以是 O_APPENDO_NONBLOCKO_ASYNC。要使用 O_ASYNC,您需要使用 PCNTL 扩展。

args

cmdF_SETLKF_SETLLW 时,args 是一个关联数组,具有以下键

  • start - 锁定开始的偏移量

  • length - 锁定区域的大小。零表示到文件末尾

  • whence - l_start 相对的位置:可以是 SEEK_SETSEEK_ENDSEEK_CUR

  • type - 锁的类型:可以是 F_RDLCK(读锁)、F_WRLCK(写锁)或 F_UNLCK(解锁)

返回值

返回 C 调用的结果。

示例

示例 #1 设置和清除锁

<?php

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

if (
dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// 文件描述符似乎被锁定
echo "无法清除锁。它被其他人持有。";
} else {
echo
"锁已成功设置/清除";
}

dio_close($fd);
?>

注释

注意: 此函数在 Windows 平台上未实现。

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top