使用 Linux 系统调用open和read。读取调用接受 3 个参数
read(File descriptor, Buffer array, Size of the buffer array);
我的问题与论点 #3 有关。假设我有多个要读入缓冲区数组的文本文件。但据我所知,C 没有Vector或ArrayList或任何其他具有动态大小的结构。
有没有一种简单的方法来计算文件的大小,所以我知道应该为我的 char 数组分配多少空间?
使用 Linux 系统调用open和read。读取调用接受 3 个参数
read(File descriptor, Buffer array, Size of the buffer array);
我的问题与论点 #3 有关。假设我有多个要读入缓冲区数组的文本文件。但据我所知,C 没有Vector或ArrayList或任何其他具有动态大小的结构。
有没有一种简单的方法来计算文件的大小,所以我知道应该为我的 char 数组分配多少空间?
您还stat()
可以确定文件的大小,然后在其上调用mmap()。您的文件将显示为“数组”,无需malloc()
记忆。
我不知道它是否称得上高效,但是简单地移动到文件末尾并从那里获取长度是“容易的”:
fseek(readf, 0, SEEK_END);
fileLen=ftell(readf);
buffer=(char *)malloc(fileLen);
通常的做法是读入一个固定长度的缓冲区,然后将每个“记录”复制到一个动态分配的结构中(例如 malloc() 一个 struct* 或一个 char*)。
正如 cnicutar 建议的那样,您还可以“统计”文件, malloc() 一个大小的缓冲区,然后一次读取所有文件。