控制台重定向stdout stderr

2021-09-20 10:14:01 字數 1987 閱讀 1948

通常,乙個控制台(命令提示符)應用程式或命令的輸出將傳送到兩個單獨的流.常規的輸出傳送到標準出

(stdout)

並將錯誤訊息傳送到標準錯誤(stderr).當你重定向控制台輸出使用">「符號,只重定向標準輸出.要重定向stderr,必須指定」2> >"的重定向符號.這將選擇第二個輸出流stderr

$ kill -hup 1234 >killout.txt 2>killerr.txt
這個命令就會將輸出和錯誤資訊分別存放在乙個單獨的檔案中.如果我們要將這兩個輸出放在乙個檔案中,我們可以使用>&來組合這兩種輸出.如:

$ kill -1 1234 >killouterr.txt 2>&1
這個命令就可以將所有的輸出放在同乙個檔案中.在這裡我們要注意的就是命令的順序.這個命令的順序可以解釋為重定向標準輸出到檔案killouterr.然後重定向標準錯誤輸出到與標準輸出同一的地方.如果我們弄錯了順序,我們就不會得到我們希望的輸出.

在這裡我們會看到kill命令的結果使用了返回**,然而常常是我們並不需要儲存標準輸出或是標準錯誤輸出.我們可以使用unix中的/dev/null來忽略所有的錯誤輸出.如:

$ kill -1 1234 >/dev/null 2>&1
gcc -wall whestone -lm -o output/whestone.out

echo

"**********= whestone running report **********="

date

|tee -a ./output/whestone.report

echo

"v2.2 begin"

>> ./output/whestone.report 2>> ./output/whestone.report

echo

" ">> ./output/whestone.report

今天在編譯程式時碰到該問題:

whetstone.c:(.text+0x56c): undefined reference to `sin'

whetstone.c:(.text+0x585): undefined reference to `cos'

whetstone.c:(.text+0x5cf): undefined reference to `atan'

檢查標頭檔案math.h已經包含,原來雖然程式中已經包含math.h,但在鏈結時要鏈結到數學庫,加上-lm編譯選項即可,如下:

gcc whetstone.c -o whetstone改為gcc whetstone.c -lm -o whetstone即可。

ps : 我的系統是centos,同樣的問題也解決了…

使用 math.h 中宣告的庫函式還有一點特殊之處,gcc命令列必須加-lm選項,因為數學函

數字於libm.so庫檔案中(這些庫檔案通常位於/lib目錄下),-lm 選項告訴編譯器,

我們程式中用到的數學函式要到這個庫檔案裡找。本書用到的大部分庫函式(例如printf)位於libc.so庫檔案中,使用libc.so中的庫函式在編譯時不需要加-lc 選項,

當然加了也不算錯,因為這個選項是 gcc 的預設選項。

(以上選自《linux c 程式設計》)

控制台輸出重定向到Memo

函式runcmd void fastcall tform1 runcmd ansistring cmdline,tstrings result else createpipe hreadpipe,hwritepipe,null,1024 screen cursor crhourglass try d...

控制台輸入輸出重定向

一般來講gui程式不能使用stdin和stdout,但是有時有些特殊需要,希望gui程式也有控制台,如 乙個程式,既可以以gui方式執行,又可以如果使用者在控制台裡打程式名的話,就以控制台程式的方式執行。通過allocconsole 和 attachconsole 這兩個win api就能實現上面的...

Unity控制台日誌開啟重定向

在unity中,一般都會自己手動封裝一次日誌,或者自定義一些日誌輸出,比如lua 的日誌輸出,雙擊開啟時我們希望重新定向的其他的檔案,而不是封裝 裡,這裡要用到的主要是 onopenassetattribute 0 每次檔案開啟時,先執行自定義的 裡自己重定向檔案和行數,然後再選擇開啟。對於unit...