我需要读取文件并将其存储在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);
}
但是,实际上,需要担心效率的时间是在它工作太慢之后。