![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
新PHP中文官方手册里对flock函数是这样描述的:
bool flock ( int handle, int operation [, int &wouldblock])
flock() 操作的 handle 必须是一个已经打开的文件指针。 operation 可以是以下值之一:
要取得共享锁定(可读),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
要取得独占锁定(可写),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
如果你不希望 flock() 在锁定时堵塞,则给 operation 增加 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。
----------------------------------------------------------
而大部分PHP中文老教程里这样介绍:
本函数用来锁住文件,使别的行程无法存取。传入的参数 fp 为文件的指针。参数 operation 的值为下列的数字之一:
1 表示配置锁住文件可以允许别的行程读取;
2 表示只有该行程可以写入文件;
3 表示读写均锁住;
4 则不锁住区块 (block)。
而本函数无论在 UNIX 或是 Windows 系列中的锁住效果都相近。执行成功则返回 true 值,否则返回 false 值。
----------------------------------------------------------
以上两教程中 operation = 3 的介绍似乎完全相反。
很久前曾听人说老教程中 flock为3的介绍是错误的。不知道是不是?
如果是的话那就意味着flock(3)是释放锁定,而完全没有锁定了。
上面手册中对1、2的介绍也不是很清楚。不知道我这样理解是否正确:
1.锁定本文件,别的行程无能对本文件进行写操作,但是可以读取本文件。
2.锁定本文件,别的行程即不能写也不能读本文件。

