寫一個(gè)簡單的進(jìn)度條了解三個(gè)方面的知識(shí):進(jìn)度條的實(shí)現(xiàn)原理,linux下的回車,以及緩沖區(qū)
(1)進(jìn)度條的實(shí)現(xiàn)原理:定義一個(gè)102的字符數(shù)組bar[102],首先第一個(gè)位置bar[0] ='/0',在while循環(huán)中:每次更新從0的位置開始寫入n 個(gè)‘*’(每次從開始位置寫入 涉及到回車問題),更新到100結(jié)束,n來控制進(jìn)度條的進(jìn)度或者寫入多少個(gè)*。
(2)Linux下的回車問題:
Unix 系統(tǒng)里,每行結(jié)尾只有“<換行>”,即“/n”;Windows系統(tǒng)里面,每行結(jié)尾是“<回車><換行>”,即“ /r/n”;Mac
系統(tǒng)里,每行結(jié)尾是“<回車>”。一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會(huì)變成
一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)。
在windows系統(tǒng)中,當(dāng)你輸入回車時(shí)會(huì)自動(dòng)變成/r/n;在linux下的回車鍵只代表/n。
(3)緩沖區(qū):
全緩沖:linux下默認(rèn)為8192字節(jié),在緩沖區(qū)滿或者顯示調(diào)用刷新函數(shù)后進(jìn)行IO系統(tǒng)調(diào)用操作,
普通磁盤文件通常使用全緩沖區(qū)訪問。
行緩沖區(qū):默認(rèn)大小為128字節(jié),當(dāng)在遇到換行符或者緩沖區(qū)滿時(shí),標(biāo)準(zhǔn)IO庫執(zhí)行IO系統(tǒng)調(diào)用操作,終端即行緩沖區(qū)。
非緩沖區(qū):標(biāo)準(zhǔn)IO庫不對(duì)字符進(jìn)行緩存,標(biāo)準(zhǔn)出錯(cuò)流stderr通常是不帶緩沖區(qū)的。
用PRintf()輸出時(shí)是先輸出到緩沖區(qū),然后再從緩沖區(qū)送到屏幕上。Linux下緩沖區(qū)刷新到屏幕的方式:1使用fflush(stdout)強(qiáng)制刷新標(biāo)準(zhǔn)輸出緩沖區(qū)。2.緩沖區(qū)已滿。3.scanf()要在緩沖區(qū)里取數(shù)據(jù)時(shí)會(huì)先將緩沖區(qū)刷新。4./n進(jìn)入緩沖區(qū)時(shí)。5. 程序結(jié)束時(shí)。
下面實(shí)現(xiàn)進(jìn)度條:
#include<stdio.h>#include<unistd.h>int main(){ int i=0; char bar[102]; const char *label ="-//|/"; bar[0] = '/0'; while(i<=100) { printf("[%-101s][%d%%][%c]/r",bar,i,label[i%4]); fflush(stdout); bar[i++] = '#'; bar[i] = '/0'; sleep(1); } printf("/n"); return 0;}makefile:
bar:bar.c gcc -o bar bar.c.PHONY:cleanclean: rm -f bar
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注