(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)
dio_fcntl β ΠΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ C fcntl Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°
Π€ΡΠ½ΠΊΡΠΈΡ dio_fcntl() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²
cmd ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ fd.
ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎ ΠΎΠ½ΠΈ Π·Π°Π΄Π°ΡΡΡΡ Π²
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_SETLKW, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ:
start - ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
length - ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π·ΠΎΠ½Ρ. 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°
whence - Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ 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-ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ.