用fmemopen创建的文件写入后没有内容

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

我在磁盘上有一些文件想要读入并连接。我不想在磁盘上创建新的临时文件。所以我决定使用

fmemopen
来读/写内存并使用 FILE API 访问它(我已经编写了仅处理单个文件的其他代码)。

排除错误检查,我基本上有:

int main(int argc, char *argv[]) {    
  off_t concatenated_file_size = 0;
  for (int i = 1; i < argc; i++) {
    concatenated_file_size += get_file_size(argv[i]);
  }

  char *buf = nullptr;
  FILE *concatenated_file = fmemopen(buf, concatenated_file_size, MODE_APPEND);

  for (int i = 1; i < argc; i++) {
    FILE *file_to_concat = open_file(argv[i]);
    int c;
    while ((c = fgetc(file_to_concat)) != EOF) {
      fputc(c, concatenated_file);
    }
  }
  rewind(concatenated_file);
  int prevchar = fgetc(concatenated_file);
}

get_file_size
仅使用
stat
open_file
只是带有错误检查的
fopen
- 根据我的测试,两者都可以正常工作。

但是,prevchar 始终是 EOF - 不知何故,没有任何内容被写入

fmemopen
返回的 FILE* 中。这个 API 应该是这样工作的吗?我是不是做错了什么?

c file gnu
1个回答
0
投票

您无法从只写(追加)文件流中读取。 使用

"a"
只允许您追加数据,而不能从流中读取数据。 使用
"a+"
"w+"
代替 — 可能是
"w+"

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