PHP LOCK_EX+LOCK_NB 一个文件
PHP LOCK_EX+LOCK_NB on a file
我们可以在文件上添加 LOCK_EX+LOCK_NB 吗?这在语法上是否正确?
如果是,它与 LOCK_EX|LOCK_NB
有何不同
$fh = fopen('guestbook.txt','a') or die($php_errormsg);
flock($fh,LOCK_EX+LOCK_NB) or die($php_errormsg);
谢谢
诸如 LOCK_EX
和 LOCK_NB
之类的标志将被定义为具有 2 的幂的值。它们旨在通过按位或(|
运算符)组合为产生位域。
实际使用的数值如下:
LOCK_SH = 1;
LOCK_EX = 2;
LOCK_NB = 4;
LOCK_UN = 8;
现在会出现加法恰好给出与按位或相同的结果的情况(例如当对两个单独的标志进行运算时,或者更一般地,对不共享任何标志的两个位字段进行运算)。但是,这是不可取的,因为如果在两个操作数中设置相同的标志,则会导致进位,从而产生意想不到的后果。
考虑这个例子:
$flags = LOCK_EX | LOCK_NB;
flock($fh, $flags | LOCK_NB); // ensure that call is non-blocking
在这种形式中,LOCK_NB
位已经在 $flags
中设置并不重要;传递给 flock
的第二个参数仍然等于 LOCK_EX | LOCK_NB
(数值为 6)。如果使用 +
代替,它将是 10(即 LOCK_EX | LOCK_UN
),这不是预期的。
我们可以在文件上添加 LOCK_EX+LOCK_NB 吗?这在语法上是否正确? 如果是,它与 LOCK_EX|LOCK_NB
有何不同$fh = fopen('guestbook.txt','a') or die($php_errormsg);
flock($fh,LOCK_EX+LOCK_NB) or die($php_errormsg);
谢谢
诸如 LOCK_EX
和 LOCK_NB
之类的标志将被定义为具有 2 的幂的值。它们旨在通过按位或(|
运算符)组合为产生位域。
实际使用的数值如下:
LOCK_SH = 1;
LOCK_EX = 2;
LOCK_NB = 4;
LOCK_UN = 8;
现在会出现加法恰好给出与按位或相同的结果的情况(例如当对两个单独的标志进行运算时,或者更一般地,对不共享任何标志的两个位字段进行运算)。但是,这是不可取的,因为如果在两个操作数中设置相同的标志,则会导致进位,从而产生意想不到的后果。
考虑这个例子:
$flags = LOCK_EX | LOCK_NB;
flock($fh, $flags | LOCK_NB); // ensure that call is non-blocking
在这种形式中,LOCK_NB
位已经在 $flags
中设置并不重要;传递给 flock
的第二个参数仍然等于 LOCK_EX | LOCK_NB
(数值为 6)。如果使用 +
代替,它将是 10(即 LOCK_EX | LOCK_UN
),这不是预期的。