接著上節課的標準輸出講。
視頻最后我們通過重定向把標準輸出寫到了文件中,但是錯誤輸出還是留在了屏幕上。
root@turbo:~# ls test test.c root@turbo:~# root@turbo:~# ./test xxxxxx 錯誤輸出 ------ 標準輸出 root@turbo:~# root@turbo:~# ./test > out.log xxxxxx 錯誤輸出 root@turbo:~# root@turbo:~#有沒有什么方法把錯誤輸出也寫到文件里面?
重定向分為輸入重定向和輸出重定向,輸入重定向使用場景比較少,我們主要來講講輸出重定向。
先把程序修改一下,只留下標準輸出。
#include運行程序的時候會在屏幕上打印字符串,如果希望把這些字符串收集起來,運行的時候加上輸出符號和文件名,字符串就寫到了文件里面。int main() { //fprintf(stderr, "xxxxxx 錯誤輸出 "); fprintf(stdout, "------ 標準輸出 "); return 0; }
root@turbo:~# gcc test.c -o test root@turbo:~# ./test > out.log root@turbo:~#一個符號表示清空文件重新寫入,兩個符號表示往文件的后面追加。
再把程序改回來,這次既有標準輸出,也有錯誤輸出:
#include代碼的運行現象是這樣的:int main() { fprintf(stderr, "xxxxxx 錯誤輸出 "); fprintf(stdout, "------ 標準輸出 "); return 0; }
root@turbo:~# ls test test.c root@turbo:~# ./test xxxxxx 錯誤輸出 ------ 標準輸出 root@turbo:~#如果像剛才一樣加上重定向,那只能把標準輸出寫到文件中:
root@turbo:~# ls test test.c root@turbo:~# ./test > out.log xxxxxx 錯誤輸出 root@turbo:~# root@turbo:~#其實這種寫法也等價于這樣的:
root@turbo:~# ls test test.c root@turbo:~# ./test 1> out.log xxxxxx 錯誤輸出 root@turbo:~# root@turbo:~#0 1 2在 Linux 中分別表示標準輸入、標準輸出、標準錯誤處理,大部分時候我們會把1省略掉。
如果想把錯誤信息也收集到文件中,可以這樣寫:
root@turbo:~# ls out.log test test.c root@turbo:~# ./test 1> out.log 2> error.log root@turbo:~#意思也很明確,標準輸出寫到文件out.log中,錯誤輸出寫到文件error.log中。
這就是上節課說的,stdout和stderr可以把不同級別的信息分開。
如果想把標準輸出和錯誤輸出寫到同一個文件中,可以使用這條命令:
root@turbo:~# ./test > out.log 2>&1 root@turbo:~#
2>&1這個符號的意思就是把錯誤輸出重定向到標準輸出。
需要注意的是,此處的順序不能修改,否則達不到想要的效果。
有的時候我們不想看到輸出信息,也不想保存輸出信息,可以考慮dev下的null設備文件,所有寫進去的數據都會被丟棄。
root@turbo:~# ./test > /dev/null 2>&1 root@turbo:~#
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Linux
+關注
關注
87文章
11479瀏覽量
213056 -
字符串
+關注
關注
1文章
589瀏覽量
21176
原文標題:2分鐘搞懂輸出重定向
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
linux shell數據重定向(輸入重定向與輸出重定向)詳細分析
>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr輸出重定向:[cpp] view plain copycommand-line1
發表于 03-02 13:59
Linux Shell系列教程之(十六) Shell輸入輸出重定向
Command > filename 2>&1把標準輸出和錯誤一起重定向到一個文件中 Command 2 > filename把標準錯誤重定向
發表于 09-12 15:53
五分鐘搞懂PID控制算法
【Arduino 101】五分鐘搞懂PID控制算法物料清單尺寸接線文章目錄物料清單尺寸接線物料清單Arduino Uno x 1超聲波模塊(HC-SR04)x 1舵機(Tower Pro
發表于 06-28 07:53
實現printf函數的重定向
目錄重定向函數屬性設置重定向函數在配置好串口之后需要在相關文件中添加以下函數以實現printf函數的重定向//注意添加頭文件#include "stdio.h"#ifdef
發表于 08-24 07:09
重定向printf輸出到串口輸出的方法
本文詳細的介紹了如何重定向printf輸出到串口輸出的多種方法,包括調用MDK微庫(MicroLib)的方法,調用標準庫的方法,以及適用于 `GNUC` 系列編譯器的方法。
發表于 02-10 07:16
DNS 重定向的缺陷
DNS 重定向的缺陷
這一種路由解決方案,由于充分利用了現有的網絡結構,結構簡單,因而被人們認為是一種有效的技術,是現階段CDN 應用中主
發表于 03-25 10:25
?2368次閱讀
管道符、重定向與環境變量
1.標準輸入重定向(STDIN,文件描述符為0):默認從鍵盤輸入,也可從其他文件或命令中輸入。 3.錯誤輸出重定向(STDERR,文件描述符為2):默認
發表于 04-29 08:48
?739次閱讀
Keil下使用STlink重定向printf的配置
Keil下使用STlink重定向printf的配置1. printf 重定向Keil默認下使用Micro LIB庫,該庫調用 fputs 實現 printf,所以需要重新定義fputs函數,以重定向
發表于 12-27 18:43
?18次下載

Linux I/O重定向詳解
Linux I/O重定向可以定義為,更改從命令讀取輸入到命令發送輸出的方式。你可以重定向命令的輸入和輸出。對于重定向符號,可以是 或者
printf輸出重定向的方法
在 PC 上運行 C 語言時,prinf 輸出的內容會打印在電腦顯示器上,這是因為 prinf 默認的輸出設備就是顯示器。而當我們在單片機上,需要通過 printf 函數將信息打印到串口,就要對 printf 函數的輸出進行

全面掌握Linux重定向技巧:讓命令行操作效率翻倍的秘密
#1 linux輸出重定向 $ command > file 2>1 這里的 ,表示重定向的目標不是一個 文件 ,而是一個 文件描述符 ,內置的文件描述符如下 1 => stdout
評論