[原]write和fwrite選哪個?底層操作很快嗎?


說是過幾天到水利研究所參加連調,可惜這幾天等着一點信號也沒有,有點慢下來了.搞搞自己的...
實驗室的arm開發箱雖然樣子很大,但是一個開發箱居然都不給原理圖.這讓人怎么搞啊,想編譯個內核,發現連液晶是哪個公司的型號都不知道...還是一步一步來吧...有C8051F做arm的過渡我感覺還不錯哈...

晚上回來早點.繼續上次的學習.fwrite和write,一個是標准I/O,一個是底層調用.誰快呢?我起初覺得即然用底層調用應該是很快的.不過實踐是檢驗真理的好辦法.

下面給出實際測試情況:
先上fwrite:
===========================
代碼:
--------------------------------------------------

#include <stdio.h>

#define N (1024 * 1024 * 5)

int main(void)
{
char block[N] = {0};
FILE *ofp;
int cnt;

ofp = fopen("1G_file.out", "w");
for (cnt = 0; cnt < 200; cnt++)
fwrite(block, N, 1, ofp);

fclose(ofp);
printf("1G file creat complete!\n");
return 0;
}

 


-------------------------------------------------------
有多快呢?
測試結果:
--------------------------------------------------------
1G file creat complete!
0.00user 3.65system 0:36.67elapsed 9%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+2048016outputs (0major+1418minor)pagefaults 0swaps

casio$ ls -lh

總用量 1001M
-rw-r--r-- 1 casio casio 1000M 2010-05-15 22:35 1G_file.out
-rwxr-xr-x 1 casio casio 8.9K 2010-05-15 22:34 1G_fpr
-rw-r--r-- 1 casio casio 269 2010-05-15 22:25 1G_fpr.c

===============================================
下面是write:
代碼,和上次經過了點修改:
------------------------------------------------------------------

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define N (1024 * 1024 * 5)

int main(void)
{
char block[N] = {0};
int out,cnt;

out = open("1G_file.out", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
for (cnt = 0; cnt < 200; cnt++)
write(out, block, N);
printf("1G file creat complete!\n");
exit(0);
}

------------------------------------------------
測試結果如下:
--------------------------------------------------
1G file creat complete!
0.00user 3.42system 0:37.51elapsed 9%CPU (0avgtext+0avgdata 0maxresident)k
8inputs+2048000outputs (0major+1401minor)pagefaults 0swaps

casio:$ ls -lh

總用量 1001M
-rw------- 1 casio casio 1000M 2010-05-15 22:40 1G_file.out
-rwxr-xr-x 1 casio casio 7.7K 2010-05-15 22:39 1G_write
-rw-r--r-- 1 casio casio 359 2010-05-15 22:27 1G_write.c

=======================================
為此我經過了好幾次測試,有時候write點,有時候fwrite快點,不過底層的時候稍微多那么幾次.但是最大的差距不會超過1秒.所以底層調用和標准I/O看,性能都差不多.

stdio庫在FILE結構里使用了一個內部緩沖區,只有在緩沖區滿時才進行底層系統調用.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM