裝潢北京seo網(wǎng)站推廣
我們?cè)谡{(diào)試程序或者打印日志時(shí)經(jīng)常會(huì)遇到重定向的問題,而有時(shí)候會(huì)遇到重定向無(wú)效的問題,下面給一個(gè)簡(jiǎn)單的例子,首先寫一個(gè)簡(jiǎn)單的test.c
#include <stdio.h>int main(){fprintf(stdout, "hello\n");fprintf(stderr, "world\n");return 0;
}
編譯生成可執(zhí)行程序test,如果執(zhí)行:
./test > log.txt
會(huì)有打印
world
而hello的內(nèi)容會(huì)跑到log.txt里面,同樣如果我們寫個(gè)腳本運(yùn)行:
output=`./test`
echo "*************************"
echo $output
打印結(jié)果如下:
world
*************************
hello
可以看到,hello跑到了output變量里面,而world沒有,這是什么原因呢,顯然關(guān)鍵在stdout和stderr。在linux系統(tǒng),一旦創(chuàng)建一個(gè)進(jìn)程,那么與之對(duì)應(yīng)的會(huì)有三個(gè)數(shù)據(jù)流:stdin,stdout和stderr,對(duì)應(yīng)的會(huì)創(chuàng)建三個(gè)文件:stdin,標(biāo)準(zhǔn)輸入文件,通常對(duì)應(yīng)著終端的鍵盤。stdout,標(biāo)準(zhǔn)輸出文件?