日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

标准输入/出与重定向

發(fā)布時間:2025/4/5 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 标准输入/出与重定向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

標(biāo)準(zhǔn)輸入、輸出、錯誤

文件描述符

每個進(jìn)程會默認(rèn)打開3個文件描述符:

STDIN_FILENO:值為0,代表標(biāo)準(zhǔn)輸出流

STDOUT_FILENO:值為1,代表標(biāo)準(zhǔn)輸入流

STDERR_FILENO:值為2,代表標(biāo)準(zhǔn)錯誤流

?

設(shè)備文件

標(biāo)準(zhǔn)輸入文件:stdin,是指向鍵盤緩沖區(qū)的文件指針

標(biāo)準(zhǔn)輸出文件:stdout,是指向屏幕顯示區(qū)的文件指針

標(biāo)準(zhǔn)錯誤文件:stderr,是指向屏幕顯示區(qū)的文件指針

??通過這兩個指針封裝了鍵盤和屏幕I/O操作的底層實(shí)現(xiàn)細(xì)節(jié),從標(biāo)準(zhǔn)輸入讀取就是讀取 /dev/stdin 的文件內(nèi)容,輸出到標(biāo)準(zhǔn)輸出就是寫入 /dev/stdout 文件。但實(shí)際上 /dev/stdin 和 /dev/stdout 并不是真實(shí)的文件,而是鏈接文件,它們連接到其他文件(默認(rèn)是鍵盤緩沖區(qū)文件和屏幕緩沖區(qū)文件)。

??可以看見stdout和stderr都是指向屏幕,那為什么還要分成stdout 和 stderr 呢?這是因?yàn)橥ǔT?server 的工作環(huán)境下,幾乎所有的程序都是 run 在 background 的,所以為了方便 debug,一般在設(shè)計(jì)程序時,就把stdout 送到/存到一個檔案(即重定向),把錯誤的信息 stderr 存到不同的檔案。

?

?

重定向

??C庫提供的一些標(biāo)準(zhǔn)I/O函數(shù)操作的是文件描述符,即標(biāo)準(zhǔn)輸入流、輸出流、錯誤流,而不是鍵盤的設(shè)備文件或屏幕的設(shè)備文件。通常標(biāo)準(zhǔn)輸入流對應(yīng)著鍵盤的標(biāo)準(zhǔn)文件,標(biāo)準(zhǔn)輸出流和錯誤流對應(yīng)屏幕的標(biāo)準(zhǔn)文件,但是當(dāng)使用重定向后改變標(biāo)準(zhǔn)輸入、輸出、錯誤流對應(yīng)的文件后,這些標(biāo)準(zhǔn)I/O函數(shù)讀取的輸入或輸出的對象就不再是鍵盤或屏幕,而是重定向的文件。

Linux中的重定向符是 < 和 >,例如:

??test.sh > test.log 指令會把test.sh腳本的標(biāo)準(zhǔn)輸出重定向到文件test.log,也就是原本打印到終端的輸出內(nèi)容被打印到test.log文件中。但是,如果 test.sh 腳本中有語法錯誤或者其他,那么錯誤信息作為標(biāo)準(zhǔn)錯位仍然會被打印到終端中。

??想要把錯誤信息和標(biāo)準(zhǔn)輸出一起打印到 test.log 文件的話,需要使用 test.sh > test.log 2>&1 ,其中 2>&1 是把這個進(jìn)程中的標(biāo)準(zhǔn)錯誤重定向到標(biāo)準(zhǔn)輸出,然后就能和標(biāo)準(zhǔn)輸出一起被打印到test.log文件中。

??注意,2>&1和2>1不一樣,后者是把標(biāo)準(zhǔn)錯誤重定向到名為 1 的文件,而不是標(biāo)準(zhǔn)輸出。

?

command > file 2>file 與 command > file 2>&1 的區(qū)別

??直觀上二者的作用都是把標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出都重定向到文件 file 中,但是實(shí)際作用有所區(qū)別。前者是把stder和stdout分別送到file中,file相當(dāng)于被打開兩次,這樣stderr和stdout的內(nèi)容會互相覆蓋,相當(dāng)于使用FD1和FD2兩個同時搶占file的管道。而后者是將stderr和stdout以同一個管道送往file,file只被打開一次。并且后者效率更高。

?

重定向到 /dev/null

??/dev/null是一個無底洞,輸入到其中的內(nèi)容會直接消失,并且它是個只讀文件。通常有不想要的垃圾信息可以扔進(jìn) /dev/null。

??>/dev/null 2>&1 的作用是把標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)錯誤都重定向到 /dev/null 中,沒有文件描述符時默認(rèn)是 1,即標(biāo)準(zhǔn)錯誤重定向到標(biāo)準(zhǔn)輸出,而標(biāo)準(zhǔn)輸出重定向到了 /dev/null,所以腳本執(zhí)行時不輸出任何信息到終端。

??cat /dev/null > file 的作用是清除文件 file 的內(nèi)容。

總結(jié)

以上是生活随笔為你收集整理的标准输入/出与重定向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。