折腾了PHP源码半个小时后,我放弃了。 :P 问题是 - PHP flock() 函数调用在 Gentoo Linux 系统上归结为什么系统调用?我遇到了一些问题(比如 block-for-30-seconds-in-every-one-of-20-loop-iterations 之类的问题)我想知道为什么是这样的。
最佳答案
// example: $stream = fopen(<strong>FILE</strong>, 'rb') or die('???');
$md = stream_get_meta_data($stream);
echo $md['wrapper_type'];<br/>
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(...):
case PHP_STREAM_OPTION_LOCKING: if (fd == -1) { return -1; } if ((zend_uintptr_t) ptrparam == PHP_STREAM_LOCK_SUPPORTED) { return 0; } if (!flock(fd, value)) { data->lock_flag = value; return 0; } else { return -1; } break;
关于PHP flock() - 背后是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001732/