浅谈输入输出”重定向“——基于Linux系统
? ? ? 進(jìn)程在啟動后會自動的打開3個文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出分別對應(yīng)文件描述符0、1、2。對于每個進(jìn)程他們都都維護(hù)了一張文件描述符表(file descriptor table),通常fd(file discriptor同下文) 的取值范圍是0-1023(可以通過ulimit -n命令查看,當(dāng)然這不是標(biāo)準(zhǔn),可以自行修改,但是這通常已經(jīng)夠用了)。每個文件描述符表項(xiàng)都有一個文件指針,指向一張打開文件表(open file table),這張表是內(nèi)核級的,意思就是說可以存在兩個進(jìn)程中的fd指向同一個打開文件表項(xiàng)。比如一個進(jìn)程打開文件之后通過fork()產(chǎn)生了一個子進(jìn)程,那么就會出現(xiàn)兩個進(jìn)程中的fd指向同一個打開文教表表項(xiàng)的情況。指向同一個打開文件表表項(xiàng)意味著這樣的fd擁有同樣的offset以及status flags。如下圖所示:
? ?
關(guān)于重定向? ? ?在bash中,重定向的語法用‘>’和'<'表示,如“2>&1”,意思就是把標(biāo)準(zhǔn)錯誤輸出(文件描述符為2)重定向(redirection)到標(biāo)準(zhǔn)輸出(文件描述符為1)。具體可以這樣實(shí)現(xiàn):
? ? ?當(dāng)然,除了使用文件描述符之外也可以使用文件名作為重定向的“方向”,如“l(fā)s > file ”,就是把ls的標(biāo)準(zhǔn)輸出將結(jié)果重定向到file的輸入之中。于是所有到標(biāo)準(zhǔn)輸出的輸出都被重定向到了file的輸入中,file的內(nèi)容便再現(xiàn)了ls命令的結(jié)果。
? ??
? ? 其實(shí)我以為對重定向的理解,關(guān)鍵不在代碼的實(shí)現(xiàn),當(dāng)知道了原理之后,腦中有了一個具體的概念,剩下的事只是“看圖說話”了,也許就是所謂的事半功倍的效果吧。
轉(zhuǎn)載于:https://www.cnblogs.com/ittinybird/p/4635767.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的浅谈输入输出”重定向“——基于Linux系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络之网络概述:6、TCP/IP模
- 下一篇: Linux 多线程编程使用pthread