读取函数向后跳过4086字节,而不是文件中向前6字节

问题描述 投票:0回答:1

我手上确实有一个奇怪的问题。我正在读取文件并运行fread,而不是像应该的那样向前跳过6个字节,而是向后返回4092-6个字节!

这里是电话:

int bread = sizeof(RoughnessReadPoint) * fread(&roughnessBuffer, sizeof(RoughnessReadPoint), 1, ptr);

这里是关联的结构:

struct RoughnessReadPoint
{
   S8 x;
   S8 y;
   S8 z;
   S8 x2;
   S8 y2;
   S8 z2;
};

这里是显示读取内容的GDB跟踪:

216         int bread = sizeof(RoughnessReadPoint) * fread(&roughnessBuffer, sizeof(RoughnessReadPoint), 1, ptr);
(gdb) p ptr->_IO_read_ptr
$5 = 0x5555557cce42 "\002\017\374\016\002\373˱N\001\002\017\374\017\020\020"
(gdb) n
217             totalBytesRead += bread;
(gdb) p ptr->_IO_read_ptr
$6 = 0x5555557cce48 "˱N\001\002\017\374\017\020\020"

正如您所看到的,它按预期跳了6。

现在是问题部分:

216         int bread = sizeof(RoughnessReadPoint) * fread(&roughnessBuffer, sizeof(RoughnessReadPoint), 1, ptr);
(gdb) p ptr->_IO_read_ptr
$14 = 0x5555557cce4c "\002\017\374\017\020\020"
(gdb) n
217             totalBytesRead += bread;
(gdb) p ptr->_IO_read_ptr
$15 = 0x5555557cbe52 "\261N\001\002\017\374\017\002\374ͱN\001\002\017\373\017\002\374бN\001\002\017\374\017\002\373ұN\001\002\017\373\016\002\373ձN\001\002\017\373\016\002\373ױN\001\002\017\374\016\002\373ڱN\001\002\017\373\016\002\373ܱN\001\002\017\373\017\002\373߱N\001\002\017\373\017\002\373\342\261N\001\002\017\373\017\002\374\344\261N\001\002\017\373\017\002\373\347\261N\001\002\017\373\017\002\373\351\261N\001\002\017\373\017\002\373\354\261N\001\002\017\373\017\002\373\356\261N\001\002\017\374\016\002\373\361\261N\001\002\017\373\016\002\373\363\261N\001\002\017\374\016\002\373\366\261N\001\002\017\374\016\002\373\370\261N\001\002\017\374\016\002\373\373\261N\001\002\017\374\016\002\373", <incomplete sequence \375>...

注意,读指针指向BACKWARDS 4086字节。

为了很好,我也打印出在这里读取了多少字节...

(gdb) p bread
$16 = 6

有人知道发生了什么吗?

其他信息:显然,这是一个调试版本,但是在与-O2一起编译时也会发生这是用g ++编译的ubuntu 18.04该文件长约130MB,大约在文件中占83MB

如果我继续阅读,文件会一遍又一遍地接近同一点,每次都回退4086字节!

c linux file io fread
1个回答
0
投票

正如dbush和kaylum在评论中所说,我应该使用ftell而不是在FILE结构中使用内部变量。我的问题是我正在读取的文件-它恰好发生在内部变量跳转的同一时刻。

© www.soinside.com 2019 - 2024. All rights reserved.