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