說是過幾天到水利研究所參加連調,可惜這幾天等着一點信號也沒有,有點慢下來了.搞搞自己的...
實驗室的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結構里使用了一個內部緩沖區,只有在緩沖區滿時才進行底層系統調用.