dio_fcntl

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

dio_fcntl在 fd 上执行 c 库 fcntl

描述

dio_fcntl(resource $fd, int $cmd, mixed $args = ?): mixed

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 指定的值,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 平台上未实现。

添加注释

用户贡献的注释 1 个注释

-8
Guillermo Prandi
11 年前
实际上,上面的文档中有一个小错误。l_start 相对于哪个位置的参数实际上是“whence”,而不是文档中所说的“wenth”。
To Top