PHP flock() - 背后是什么?

标签 php flock

折腾了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/

相关文章:

php - Paypal api 将产品插入数组

php - 如何抛出未实现错误

php - 安装 composer 后我还没有 vendor 文件夹?

javascript - 避免登录用户访问index.php

linux - 什么时候对 flock 的阻塞调用会失败?

c - 在 Solaris 5.10 上使用集群()

perl - 涌入 Perl : Bad file descriptor

PHP 日期时间 DST

php - 测试文件是否被锁定