H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

启用文件协程后对于大于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;
}

回答

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

本文地址:H5W3 » 文件协程fseek ftell 文件大于2G bug

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址