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.
(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)
dio_fcntl — Realiza uma chamada à função fcntl da biblioteca C em fd
A função dio_fcntl() realiza a
operação especificada por cmd
no descritor de arquivo
fd
. Alguns comandos exigem que
argumentos adicionais args
sejam fornecidos.
fd
O descritor de arquivo retornado por dio_open().
cmd
Pode ser uma das seguintes operações:
F_SETLK
- A trava é definida ou removida. Se a trava
estiver sendo mantida por outra pessoa, dio_fcntl() retorna
-1.
F_SETLKW
- semelhante a F_SETLK
,
mas caso a trava esteja sendo mantida por outra pessoa,
dio_fcntl() aguarda até que a trava seja liberada.
F_GETLK
- dio_fcntl()
retorna um array associativo (conforme descrito abaixo) se alguém mais
estiver impedindo a trava. Se não houver obstrução, a chave "type" será definida
como F_UNLCK
.
F_DUPFD
- encontra o menor número de descritor
de arquivo disponível maior ou igual a args
e os retorna.
F_SETFL
- Define as flags do descritor de arquivo para
o valor especificado por args
, que pode ser
O_APPEND
, O_NONBLOCK
ou
O_ASYNC
. Para usar O_ASYNC
você precisará usar PCNTL
(extensão).
args
args
é um array associativo, quando
cmd
é F_SETLK
ou
F_SETLLW
, com as seguintes chaves:
start
- offset onde a trava começa
length
- tamanho da área travada. Zero significa até o final
do arquivo
whence
- Onde l_start é relativo a: pode ser
SEEK_SET
,
SEEK_END
e SEEK_CUR
type
- tipo de trava: pode ser
F_RDLCK
(trava de leitura),
F_WRLCK
(trava de escrita) ou
F_UNLCK
(destrava)
Retorna o resultado da chamada C.
Exemplo #1 Definindo e removendo uma trava
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// o descritor de arquivo parece estar trancado
echo "The lock can not be cleared. It is held by someone else.";
} else {
echo "Lock successfully set/cleared";
}
dio_close($fd);
?>
Nota: Esta função não foi implementada em plataformas Windows.
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.