stdin,stdout,stderr
?
其實(shí),stdin,stdout,stderr就是這個(gè)fp,不過(guò)他是隨著計(jì)算機(jī)系統(tǒng)的開(kāi)啟默認(rèn)打開(kāi)的,其中0就是stdin,表示輸入流,指從鍵盤輸入,1代表stdout,2代表stderr,1,2默認(rèn)是顯示器。printf()其實(shí)就是向stdout中輸出,等同于fprintf(stdout,“****”),perror()其實(shí)就是向stderr中輸出,相當(dāng)于fprintf(stderr,“***”),那到底stdout,和stderr有什么區(qū)別和作用呢?
?
我們?cè)趯懗绦驎r(shí)用printf()是為了我們能監(jiān)控我們的程序運(yùn)行狀況,或者是說(shuō)debug,如果我們的程序是一直運(yùn)行,不停下來(lái),我們不可能時(shí)刻盯著屏幕去看程序輸出,這時(shí)我們就可以用文件重定向。將輸出到一文件中,我們以后就可以看這文件就行。舉個(gè)例子,test.c
[cpp]?view plain?copy?
1.?<pre?class="cpp"?name="code">#include<stdio.h>??
2.???
3.?int?main()??
4.?{??
5.??????printf("stdout?Helo?World!!\n");???
6.???
7.??????return?0;??
8.?} ?
編譯過(guò)后,我們./test > test.txt(默認(rèn)是將stdout里的內(nèi)容重定向到文件中),這樣就把test程序輸出的內(nèi)容輸出到test.txt文件中。還有一種更明晰的寫法./test? 1>test.txt,這里的1就代表stdout。說(shuō)到這你應(yīng)該知道stderr該怎樣處理了。再舉個(gè)例子test.c:
[cpp]?view plain?copy?
1.?#include<stdio.h>??
2.???
3.?int?main()??
4.?{??
5.??????printf("Stdout?Helo?World!!\n");??
6.??????fprintf(stdout,"Stdout?Hello?World!!\n");??
7.??????perror("Stderr?Hello?World!!\n");??
8.??????fprintf(stderr,"Stderr?Hello?World!!\n");??
9.????????
10.??????return?0;??
11.?} ?
編譯過(guò)后,./test,屏幕上是四條輸出,如果./test > test.ext ,結(jié)果是屏幕上輸出兩條Stderr Hello World!!,Stdout Helo World!!在文件test.txt中,基于上面說(shuō)的很容易理解現(xiàn)在的結(jié)果,于是我們可以隨便處理我們想要的輸出,例如:
?
./test 1>testout.txt 2>testerr.txt,我們將stdout輸出到文件testout.txt中,將stderr輸出到testerr.txt文件中;
./test 1>testout.txt ,將stdout輸出到文件testout.txt 中,stderr輸出到屏幕上;
./test 2>testerr.txt,將stderr輸出到文件testerr.txt中,stdout輸出到屏幕上;
./test > test.txt 2>&1,這是將stdout和stderr重定向到同一文件test.txt文件中。
?
如果我們不想看到輸出內(nèi)容,既不想在屏幕上看見(jiàn),也不想重定向到文件中,別擔(dān)心,萬(wàn)能的Linux有解決辦法,./test >?/dev/zero 2>&1,這樣就看不到任何輸出了。
?
Note:stderr,和stdout還有重要一點(diǎn)區(qū)別,stderr是沒(méi)有緩沖的,它立即輸出,而stdout默認(rèn)是行緩沖,也就是它遇到‘\n’,才向外輸出內(nèi)容,如果你想stdout也實(shí)時(shí)輸出內(nèi)容,那就在輸出語(yǔ)句后加上fflush(stdout),這樣就能達(dá)到實(shí)時(shí)輸出的效果。
轉(zhuǎn)載于微信公眾號(hào)?嵌入式ARM
總結(jié)
以上是生活随笔為你收集整理的stdin,stdout,stderr的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oppo 小米,vivo等手机获取roo
- 下一篇: 日期类Date