©
本文档使用
php中文网手册 发布
(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5, PHP 7)
dio_fcntl — Performs a c library fcntl on fd
$fd
, int $cmd
[, mixed $args
] )
The dio_fcntl() function performs the
operation specified by cmd on the file
descriptor fd. Some commands require
additional arguments args to be supplied.
fd The file descriptor returned by dio_open() .
cmd Can be one of the following operations:
F_SETLK - Lock is set or cleared. If the lock
is held by someone else dio_fcntl() returns
-1.
F_SETLKW - like F_SETLK ,
but in case the lock is held by someone else,
dio_fcntl() waits until the lock is released.
F_GETLK - dio_fcntl()
returns an associative array (as described above) if someone else
prevents lock. If there is no obstruction key "type" will set
to F_UNLCK .
F_DUPFD - finds the lowest numbered available
file descriptor greater than or equal to args
and returns them.
F_SETFL - Sets the file descriptors flags to
the value specified by args, which can be
O_APPEND , O_NONBLOCK or
O_ASYNC . To use O_ASYNC
you will need to use the PCNTL
extension.
args args is an associative array, when
cmd is F_SETLK or
F_SETLLW , with the following keys:
start - offset where lock begins
length - size of locked area. zero means to end of file
whence - Where l_start is relative to: can be
SEEK_SET ,
SEEK_END and SEEK_CUR
type - type of lock: can be
F_RDLCK (read lock),
F_WRLCK (write lock) or
F_UNLCK (unlock)
Returns the result of the C call.
Example #1 Setting and clearing a lock
<?php
$fd = dio_open ( '/dev/ttyS0' , O_RDWR );
if ( dio_fcntl ( $fd , F_SETLK , Array( "type" => F_WRLCK )) == - 1 ) {
// the file descriptor appears locked
echo "The lock can not be cleared. It is held by someone else." ;
} else {
echo "Lock successfully set/cleared" ;
}
dio_close ( $fd );
?> Note: 此函数未在 Windows 平台下实现。
[#1] Guillermo Prandi [2013-06-11 11:52:01]
Actually, there's a small typo in the above docs. The parameter for where l_start is relative to is actually "whence" and not "wenth" like stated.