我在磁盘上有一些文件想要读入并连接。我不想在磁盘上创建新的临时文件。所以我决定使用
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 应该是这样工作的吗?我是不是做错了什么?
您无法从只写(追加)文件流中读取。 使用
"a"
只允许您追加数据,而不能从流中读取数据。 使用 "a+"
或 "w+"
代替 — 可能是 "w+"
。