dio_fcntl
(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5)
dio_fcntl — fd について C ライブラリの fcntl を実行する
説明
関数 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_APPEND、O_NONBLOCKあるいはO_ASYNCのいずれかです。O_ASYNCを使用するには、 PCNTL 拡張モジュールが必要です。
-
-
args -
argsは連想配列で、cmdがF_SETLKあるいはF_SETLLWの際に以下のキーを保持します。-
"start" - ロックを開始するオフセット。
-
"length" - ロックする領域の大きさ。ゼロはファイルの終端までを意味します。
-
"wenth" - l_start の相対位置指定。
SEEK_SET、SEEK_ENDおよびSEEK_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 環境にはまだ実装されていません。