- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 fmemopen
创建一个变量 FILE* fid
以将其传递给一个从打开的文件中读取数据的函数。
在该函数的某处,它使用以下代码找出文件的大小:
fseek(fid, 0, SEEK_END);
file_size = ftell(fid);
这在常规文件的情况下效果很好,但在由 fmemopen
创建的文件 ID 的情况下,我总是得到 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
最佳答案
在 fmemopen
的情况下,如果您使用选项 b
打开,则 SEEK_END measures the size of the memory buffer .您看到的值必须是默认缓冲区大小。
关于c - 查找由 fmemopen 创建的文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13472210/
我正在尝试使用 fmemopen 函数将可执行文件的 char* 映射到内存中,该函数应该返回一个 FILE * 以便能够使用它(根本无需将其写入硬盘)。 fmemopen 函数更改文件的问题,因此当
我在“w+”模式下使用 fmemopen() 打开了一个内存流。我在这个文件中写了一些数据,然后我试图读取数据来计数。写的行。但是我通过使用 fgets() 访问这个文件得到了垃圾值。我的代码很大,所
我正在尝试从使用 fmemopen 和 char * 创建的流中读取宽字符。 char *s = "foo bar foo"; FILE *f = fmemopen(s,strlen(s),"r");
我正在使用 fmemopen 创建一个变量 FILE* fid 以将其传递给一个从打开的文件中读取数据的函数。 在该函数的某处,它使用以下代码找出文件的大小: fseek(fid, 0, SEEK_E
我无法让 fmemopen 一致地打印到 cstring。做这样的事情: #include #include int main(void) { char buf[256]; FIL
我有以下代码: char *filedata; FILE *f; filedata = malloc(3); if (filedata == NULL) { fprintf(stderr, "
我在 Linux 中有一个 fmemopen 文件描述符(指向父缓冲区),我希望能够在 C 中将此文件描述符设置为子进程的标准输入(我不为子进程设置)可以访问代码) 这可能吗?如果是这样,我该怎么做?
在阅读 string streams 上的 GNU 文档时我发现了两个相似的函数,它们做的事情非常相似: FILE * fmemopen (void *buf, size_t size, const
我正在尝试插入最初从 stdin 读取的 fscanf 函数,例如 fscanf(stdin,"%ms", &secret)。在我的插入函数中,我试图让它从我用字符串创建的输入文件中读取。以下是我正在
可以肯定的是,缓冲 I/O 到磁盘上的文件比无缓冲更快。但为什么即使写入内存缓冲区也有好处? 以下基准代码示例是使用 gcc 5.40 使用优化选项 -O3 编译的,链接到 glibc 2.24。 (
已通过 glibc 2.24 解决 -- 请参阅下面的更新 这是一段 C 代码(使用 gcc 5.3.1、glibc 2.23 编译): #include #include #include #
我可以使用什么来编写自定义流? 最佳答案 fmemopen 是 POSIX 但不是 C 标准的一部分。 fopencookie 不是任何标准的一部分;这是一个 GNU 函数。 tmpfile 是 fm
我是一名优秀的程序员,十分优秀!