文件协程fseek ftell 文件大于2G bug

发布于 2022-09-12 04:28:49 字数 615 浏览 15 评论 0

启用文件协程后对于大于2G的文件fseek 和ftell 会造成错误

<?php
Swoole\Runtime::enableCoroutine();
Co\run(function () {
    $fp=fopen("/tmp/555","r+");
    fseek($fp,2147724448,SEEK_SET);
    echo ftell($fp);    
});

输出结果:
-2147242848

修改 plain_wrapper.c 389行

if (data->fd >= 0)
    {
        zend_off_t result;
        //result = lseek(data->fd, offset, whence); 此行 lseek修改为lseek64 重新编译
        result = lseek64(data->fd, offset, whence);
        if (result == (zend_off_t) -1)
            return -1;

        *newoffset = result;
        return 0;

    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

零時差 2022-09-19 04:28:49

实际上,以 32位无符号整数来看, -21472428482147724448 相等。

信愁 2022-09-19 04:28:49

建议补丁至git

神经暖 2022-09-19 04:28:49

底层已修复此问题,与 lseeklseek64无关的。

https://github.com/swoole/swo...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文