折腾了半个小时的PHP源码后,我放弃了。:P 问题是——在 Gentoo Linux 系统上 PHP 的 flock() 函数调用归结为什么系统调用?我遇到了一些问题(比如每 20 次循环迭代中阻塞 30 秒的问题),我想知道为什么会这样。
问问题
2817 次
4 回答
3
// example: $stream = fopen(FILE, 'rb') or die('???');
$md = stream_get_meta_data($stream);
echo $md['wrapper_type'];
flock($stream);
如果这打印了plainfile,那么对php函数flock()的调用由调用flock()的php_stdiop_set_option(...)处理。根据 PHP 是否使用 HAVE_FLOCK 编译,这可能是系统调用flock()或flock_compat.c 中定义的使用fcntl()的函数。在我的 gentoo 系统上,PHP 是用 HAVE_FLOCK 编译的。
main/streams/plain_wrapper.c @ static int php_stdiop_set_option(...):
案例 PHP_STREAM_OPTION_LOCKING: 如果(fd == -1){ 返回-1; } 如果((zend_uintptr_t)ptrparam == PHP_STREAM_LOCK_SUPPORTED){ 返回0; } if (!flock(fd, value)) { 数据->lock_flag = 值; 返回0; } 别的 { 返回-1; } 休息;
于 2009-06-16T14:49:33.170 回答
2
http://www.opengroup.org/onlinepubs/009695399/functions/fcntl.html
/etc/standard/flock_compat.c [line 66]
ret = fcntl(fd, operation & LOCK_NB ? F_SETLK : F_SETLKW, &flck);
于 2009-06-16T15:00:59.450 回答
0
除非我误解了您的要求,否则 PHP是对 Gentoo 上flock()
Unix 系统函数的调用。flock()
它们具有相同的语义。
于 2009-06-16T14:12:18.207 回答