提问人:DrBwts 提问时间:2/17/2023 更新时间:2/17/2023 访问量:66
fseek() 在我期望相同的计数时给出 2 个不同的计数
fseek() giving 2 different counts when I expected the same count
问:
如果我使用
fseek(file_ptr, 0, SEEK_END);
size = ftell(file_ptr);
我明白了什么是正确的,因为我在文件中每个 8 个字节处有 x。480000
60000
double float
double
但是当我使用
fseek(file_ptr, sizeof(double), SEEK_END);
size = ftell(file_ptr);
我得到了额外的 8 个字节。有人知道它们是什么吗?480008
答:
3赞
Harith
2/17/2023
#1
但是当我使用
fseek(file_ptr, sizeof(double), SEEK_END);
size = ftell(file_ptr);
我得到480008额外的 8 个字节
这是因为系统上 a 的大小为 8 个字节,并将文件位置指示器设置为 8 个字节。double
fseek()
SEEK_END
新位置(以字节为单位)是通过添加偏移量获得的 bytes 设置为 whence 指定的位置。
再:
有人知道它们是什么吗?
这是开放组的手册页对它的看法:
fseek() 函数应允许设置文件位置指示器 超出文件中现有数据的末尾。如果稍后写入数据 此时,GAP 中数据的后续读取应返回字节 值为 0,直到数据实际写入间隙。
fseek() 在无法搜索的设备上的行为是 实现定义。与 关联的文件偏移量的值 这样的设备是未定义的。
请注意,此行为仅针对符合 POSIX 标准的系统指定。
1赞
Roberto Caboni
2/17/2023
#2
答案在 fseek(
) 手册页(Linux 操作系统)中。
函数原型是
int fseek(FILE *stream, long offset, int whence);
其中参数说明如下offset
新位置(以字节为单位)是通过将偏移字节添加到 指定的位置来获得的。
whence
由于您的偏移量是 8(在您的系统中)并且原始文件大小是 480000,因此您得到480008。sizeof double
本手册从未提及任何阻止在 之后设置指针的限制。SEEK_END
评论
sizeof(double)
和不一样,那你为什么期待同样的结果呢?0
fseek
fseek