linux下的各个语言中stdin,stdout和stderr理解
在linux中經(jīng)常會看到stdin,stdout和stderr,這3個可以稱為終端(Terminal)的標準輸入(standard input),標準輸出( standard out)和標準錯誤輸出(standard error)。
通過man stdin查看手冊,可以看到它們都是在stdio.h中定義的。 當linux開始執(zhí)行程序的時候,程序默認會打開這3個文件流,這樣就可以對終端進行輸入輸出操作。下面用c語言模擬下這3個文件流。
標準輸入(standard input)
在c語言中表現(xiàn)為調(diào)用scanf函數(shù)接受用戶輸入內(nèi)容,即從終端設備輸入內(nèi)容。也可以用fscanf指明stdin接收內(nèi)容。 標準輸入的文件標識符為0。
#include <stdio.h>intmain(void) {charstr[10];scanf("%s", str);fscanf(stdin, "%s", str);return0; }標準輸出(standard out)
在c語言中表現(xiàn)為調(diào)用printf函數(shù)將內(nèi)容輸出到終端上。使用fprintf也可以把內(nèi)容輸出到終端上。標準輸出的文件標識符為1
#include <stdio.h>intmain(void) {printf("%s\n", "hello");fprintf(stdout, "%s\n", "hello");return0; }標準錯誤輸出(standard error)
標準錯誤和標準輸出一樣都是輸出到終端上, 標準錯誤輸出的文件標識符為2。筆者更傾向于從語義上分析:在程序處理的時候,正常的信息輸出作為標準輸出,產(chǎn)生錯誤的輸出作為標準錯誤輸出。這樣在重定向的時候,就可以將正常的信息和錯誤的信息重定向到不同的文件。
#include <stdio.h>intmain(void) {printf("%s\n", "hello");fprintf(stderr, "%s\n", "error");return0; }上面這個程序分別往終端和stderr輸出了信息,編譯這個程序生成二進制文件a.out,使用下列命令運行,重定向輸出。
./a.out 1>log.txt 2>error.txt這樣就把輸出的內(nèi)容hello保存到了log.txt文件,錯誤的信息error保存到了error.txt文件。(也就是通過管道重定位)
在c語言里,也可以使用freopen函數(shù)重定向輸出流
#include <stdio.h>intmain(void) {FILE*out = freopen("out.txt", "w", stdout);printf("%s\n", "hello");return0; }上例代碼編譯執(zhí)行后,終端上并沒輸出內(nèi)容,而是保存到了out.txt這個文件了。
?
總結(jié)
總的來說,stdin,stdout和stderr還是和終端有密切關系,通常在生產(chǎn)環(huán)境時,會將這3個流重定向到其它文件。
總結(jié)
以上是生活随笔為你收集整理的linux下的各个语言中stdin,stdout和stderr理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web安全测试---WebScarab工
- 下一篇: 查看文件时间及修改(MACN,stat命