我需要读取文件并将其存储在mainbuff和mainbuff2中。

我应该只使用open()read()write()等系统调用。

我不想将它们存储在堆栈中,如果很大的话该怎么办?堆分配更好。

此代码有效:

...
    char charbuf;
    char *mainbuff1=malloc(100);
    char *mainbuff2=malloc(100);
    while (read(file1, &charbuf, 1)!=0)
            mainbuff1[len++]=charbuf;
    while (read(file2, &charbuf, 1)!=0)
            mainbuff2[len2++]=charbuf;
...

但是mainbuff只有100个字符。更好的解决方案是在计数文件中的字符后分配mainbuff,如下所示:
...
    char charbuf;
    while (read(file1, &charbuf, 1)!=0)
            len++;
    while (read(file2, &charbuf, 1)!=0)
            len2++;
    char *mainbuff1=malloc(len);
    char *mainbuff2=malloc(len2);
...

然后再次重复while循环并将字节读入mainbuff。

但是对于大文件,有2个循环(第一个将读取并计数,第二个将读取)效率低下且速度慢。需要以一种或更有效的方式进行。请帮忙!不知道!

最佳答案

您可以使用fstat来获取文件大小,而不是读取两次。

#include <sys/stat.h>

int main() {
    struct stat sbuf;
    int fd = open("filename", O_RDWR);
    fstat(fd, &sbuf);
    char *buf = malloc(sbuf.st_size + 1);
}

但是,实际上,需要担心效率的时间是在它工作太慢之后。

09-19 11:57