fd について C ライブラリの fcntl を実行する
$fd
$cmd
$args
関数 dio_fcntl は、ファイル記述子 fd において cmd で指定された処理を行います。いくつかのコマンドでは、オプションの引数 args の指定が必要となります。
fd
cmd
args
dio_open が返すファイル記述子。
以下の処理のいずれか。
F_SETLK - ロックが設定あるいはクリアされます。 ロックが他の誰かに設定されている場合、dio_fcntl は -1 を返します。
F_SETLK
F_SETLKW - F_SETLK と似ていますが、ロックが他の誰かに設定されている場合は dio_fcntl はそのロックが開放されるまで待ちます。
F_SETLKW
F_GETLK - dio_fcntl は、他の誰かがロックを妨げる場合、(後述の)連想配列を返します。 妨げるものがない場合、キー "type" は F_UNLCK に設定されます。
F_GETLK
F_UNLCK
F_DUPFD - args 以上で最小のファイル記述子を探し、それを返します。
F_DUPFD
F_SETFL - ファイル記述子のフラグを args で指定した値に設定します。指定できる値は O_APPEND、O_NONBLOCK あるいは O_ASYNC のいずれかです。 O_ASYNC を使用するには、 PCNTL 拡張モジュールが必要です。
F_SETFL
O_APPEND
O_NONBLOCK
O_ASYNC
args は連想配列で、 cmd が F_SETLK あるいは F_SETLLW の際に以下のキーを保持します。
F_SETLLW
start - ロックを開始するオフセット。
start
length - ロックする領域の大きさ。ゼロはファイルの終端までを意味します。
length
wenth - l_start の相対位置指定。 SEEK_SET、 SEEK_END および SEEK_CUR のいずれか。
wenth
SEEK_SET
SEEK_END
SEEK_CUR
type - ロックの種類。F_RDLCK(読み込み ロック)、F_WRLCK(書き込みロック)あるいは F_UNLCK(ロック解除)のいずれか。
type
F_RDLCK
F_WRLCK
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 環境にはまだ実装されていません。