我正在使用fmemopen
创建一个变量FILE* fid
以将其传递给从打开的文件中读取数据的函数。
在该函数的某处,它使用以下代码来找出文件的大小:
fseek(fid, 0, SEEK_END);
file_size = ftell(fid);
这在常规文件的情况下效果很好,但在我创建的文件 ID 的情况下,fmemopen
我总是得到file_size = 8192
任何想法为什么会发生这种情况?有没有一种方法可以获得适用于常规文件和使用创建的文件的正确文件大小fmemopen
?
编辑:
我的电话fmemopen
:
fid = fmemopen(ptr, memSize, "r");
其中memSize
!= 8192
编辑2:
我创建了一个最小的例子:
#include <cstdlib>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(int argc, char** argv)
{
const long unsigned int memsize = 1000000;
void * ptr = malloc(memsize);
FILE *fid = fmemopen(ptr, memsize, "r");
fseek(fid, 0, SEEK_END);
long int file_size = ftell(fid);
printf("file_size = %ld\n", file_size);
free(ptr);
return 0;
}
顺便说一句,我目前正在另一台计算机上工作,在这里我得到 file_size=0