我正在为运行Linux的嵌入式系统开发应用程序。
在我的情况下,我有一个相当大的文件(与系统能力相比),作为输入。该文件有一个小的头部,其大小仅为几百字节。在我的应用程序中,我需要从文件中删除该头部,使文件没有头部并只包含相关数据。通常,我会按照以下方式实现(伪代码):
这种方法的问题是它创建了一个临时文件
在我的情况下,我有一个相当大的文件(与系统能力相比),作为输入。该文件有一个小的头部,其大小仅为几百字节。在我的应用程序中,我需要从文件中删除该头部,使文件没有头部并只包含相关数据。通常,我会按照以下方式实现(伪代码):
char *input_file = "big_input.bin";
char *tmp_file1 = "header.bin";
char *tmp_file2 = "data.bin";
/* Copy the content of header from input file to tmp_file1 */
_copy_header(tmp_file1, input_file);
/* Copy the data from input file to tmp_file2 */
_copy_data(tmp_file2, input_file);
/* Rename temp file to input file */
unlink(input_file);
rename(tmp_file2, input_file);
这种方法的问题是它创建了一个临时文件
tmp_file2
,其大小几乎与输入文件一样大(因为头部很小)。在我的系统中,所有东西都存储在内存中,而内存非常有限。创建一个大的临时文件会导致 out-of-memory 错误。
那么我该如何避免创建大的临时文件?