1

使用 Linux 系统调用openread读取调用接受 3 个参数

read(File descriptor, Buffer array, Size of the buffer array);

我的问题与论点 #3 有关。假设我有多个要读入缓冲区数组的文本文件。但据我所知,C 没有VectorArrayList或任何其他具有动态大小的结构。

有没有一种简单的方法来计算文件的大小,所以我知道应该为我的 char 数组分配多少空间?

4

4 回答 4

7

您还stat()可以确定文件的大小,然后在其上调用mmap()。您的文件将显示为“数组”,无需malloc()记忆。

于 2012-09-10T18:05:30.103 回答
2

好吧,如果您使用的是 linux,则可以使用它stat(2)来获取文件大小。该结构stat包含一个st_size以字节为单位指示总大小的字段。


读取内存中的整个文件真的是最好的方法吗?

于 2012-09-10T17:59:15.627 回答
2

我不知道它是否称得上高效,但是简单地移动到文件末尾并从那里获取长度是“容易的”:

    fseek(readf, 0, SEEK_END);
    fileLen=ftell(readf);
    buffer=(char *)malloc(fileLen);
于 2012-09-10T18:04:30.417 回答
1

通常的做法是读入一个固定长度的缓冲区,然后将每个“记录”复制到一个动态分配的结构中(例如 malloc() 一个 struct* 或一个 char*)。

正如 cnicutar 建议的那样,您还可以“统计”文件, malloc() 一个大小的缓冲区,然后一次读取所有文件。

于 2012-09-10T18:01:30.387 回答