最近在試著用純 ESP8266 實驗一些 arduino 能用的功能,I2c、EEPROM、ADC..這篇紀錄一下,雖然很無腦的就可以 i2c,只是還是比 arudino 要多查一些資料。﹍。
分類: C
printf and write
一般在使用 printf 都會直接將結果印出在螢幕上,都不會發生問題,也不會發現其實 printf 的行為背後其實有一個緩衝區在紀錄。除非遇到 \n 或 程式結束,或者有其他東西要輸出,否則不會自動 flush 緩衝區,要強制清空緩衝區可以使用 fflush(stdout) 。
而 write(1 /*stdout*/, buffer ,size) 則可以直接將字串印到 stdout 中,不經由緩衝區處理。
在一般的情況下還是 printf 效能會比較好,在多執行緒或多行程的情況下也比較不會有不合乎預期的情況發生。例如 兩個行程同時輸出 output 變成 ooututppuutt 之類的。
會發生這種現象通常是在無窮迴圈的程式,由於程式沒有結束,又沒有輸出一些換行符號,造成輸出一直卡在緩衝區中。
#include <stdio.h> int main() { while(1) { printf("hello");// printf("hello\n") sleep(1); } }
參考資料: