使用malloc和POSIX文件操作将文件读入动态内存阵列

时间:2009-11-14 16:04:43

标签: c file-io malloc posix

  

可能重复:
  reading a text file into an array in c

我正在尝试将文件读入动态数组。 首先,我使用open()打开文件,以便获取文件描述符 但后来我不知道如何使用malloc将内存分配给动态数组,以便从内存中对文件进行一些数据修改。

3 个答案:

答案 0 :(得分:3)

请在发布问题前搜索,我想您可以在这里找到答案:

  

reading a text file into an array in c

答案 1 :(得分:2)

open(),lseek()到文件末尾,使用tell()获取文件大小,然后相应地分配内存将如上所述正常工作。

除非有特殊原因,否则fopen(),fseek(),ftell()是一个更好的主意(可移植到C标准库中)。

这当然假设您要打开的文件很小。如果您正在处理大文件,那么为整个文件分配内存可能根本就不是一个好主意。

您可能会考虑将内存映射文件用于大文件。 POSIX系统提供mmap()和munmap()函数,用于映射内存中的文件或设备。有关详细说明,请参阅mmap man page。内存映射文件的工作方式类似于C数组,但获取实际文件数据的责任留给操作系统,该操作系统在处理文件时根据需要从磁盘中提取适当的页面。

如果文件大小大于32位地址空间,则内存映射文件方法有局限性。然后,您一次只能映射文件的一部分(在32位计算机上)。

答案 2 :(得分:-1)

像这样:

char *buffer = (char *)malloc(size);
int actual = read(buffer,size,filehandle);

现在字节在缓冲区中