我需要讀取文件並將它們存儲在mainbuff和mainbuff2中。優化我的read()循環C(一個循環中的兩個循環)
我應該只使用像系統調用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個字符。更好的方法是這樣的文件計數個字符後的alloc 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個循環(首先會讀取並計數,其次會讀取)對於大型文件來說效率並不高並且很慢。需要在一個或其他更有效的工作中做到這一點。請幫忙!不知道!
優化前的配置文件! – qdii 2013-04-21 09:49:12
你應該考慮到你對'read'的調用結果。你需要處理不同的'-1','0'和'1'可能的結果。你可以在讀取緩衝區的同時增加緩衝區(通過分配一個新緩衝區並複製到舊緩衝區)。順便說一句,如果你想提高效率,你應該一次「讀取」多於一個字節(通常一次讀取幾千字節塊)。 – 2013-04-21 09:49:43
你見過mmap(2)嗎? – 2013-04-21 09:59:01