2024 年 PHP Conference Japan

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