亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 求教 stdin、stdout FD0、FD1 理解 [打印本頁]

作者: yonka    時間: 2012-12-30 19:11
標(biāo)題: 求教 stdin、stdout FD0、FD1 理解
對linux中文件和I/O的一知半解導(dǎo)致的混亂...

1、我們說的FD1、FD0是和stdout、stdin完全等價呢 還是 只是默認(rèn)情況下 FD0從stdin讀取、FD1輸出到stdout呢?
2、stdin和鍵盤輸入、stdout和屏幕輸出的關(guān)系...

說白了就是下面兩個小圖的區(qū)別?到底是應(yīng)該按照哪種方式理解呢?



        我的理解是:   1表示正確消息輸出,默認(rèn)是送到stdout,而stdout默認(rèn)是送到屏幕。然后1可以重定向到其他,比如1>&9,這樣就不一定送到stdout;同樣stdout可以重定向到其他,比如送到文件或者管道符文件...,這樣的話也不一定送到屏幕。
1 ---  --- stdout --- --- 屏幕
       |                    |
   other              other



    或者是:?                1(stdout) ---  --- 屏幕
                                                         |
                                                     other(|文件、文件、其他&n指向的文件...)


        



作者: reyleon    時間: 2012-12-30 19:42
http://www.tsnc.edu.cn/default/t ... io-redirection.html
作者: yonka    時間: 2012-12-30 20:36
回復(fù) 2# reyleon


    我覺得這個里邊本身就沒描述清楚啊。

“默認(rèn)情況下始終有3個"文件"處于打開狀態(tài), stdin(鍵盤), stdout(屏幕), 和stderr(錯誤消息輸出到屏幕上). 這3個文件和其他打開的文件都可以被重定向. 對于重定向簡單的解釋就是捕捉一個文件, 命令, 程序, 腳本, 或者是腳本中的代碼塊(請參考例子 3-1和例子 3-2)的輸出, 然后將這些輸出作為輸入發(fā)送到另一個文件, 命令, 程序, 或腳本中. ”

如果stdin、stdout、stderr分別是三個stream文件而0、1、2分別是其描述符的話。
那"stdin(鍵盤), stdout(屏幕), 和stderr(錯誤消息輸出到屏幕上)"是指stdin、stdout和stderr等同于 鍵盤、屏幕和錯誤消息輸出到屏幕上? 那這三個文件內(nèi)容的重定向又作何理解呢?
還是 stdin、stdout 和stderr在默認(rèn)情況下的輸出/輸入方式為 鍵盤、屏幕 和 錯誤消息輸出到屏幕上? 這么理解才好點吧?
作者: blackold    時間: 2012-12-31 08:16
回復(fù) 1# yonka


    文件是靜態(tài)的,文件描述符是動態(tài)的,打開文件時系統(tǒng)才為其分配FD。

   系統(tǒng)通過FD來操作文件。

   stdin,stdout,stderr的FD分別為0,1,2。這三個文件默認(rèn)關(guān)聯(lián)到終端,也就是說stdin關(guān)聯(lián)到鍵盤,stdout...


   重定向stdin就是重定向FD0,……

   
作者: yonka    時間: 2012-12-31 10:17
回復(fù) 4# blackold


    "回復(fù) 1# yonka


    文件是靜態(tài)的,文件描述符是動態(tài)的,打開文件時系統(tǒng)才為其分配FD。

   系統(tǒng)通過FD來操作文件。

   stdin,stdout,stderr的FD分別為0,1,2。這三個文件默認(rèn)關(guān)聯(lián)到終端,也就是說stdin關(guān)聯(lián)到鍵盤,stdout...


   重定向stdin就是重定向FD0,……"


"打開文件時系統(tǒng)才為其分配FD"   
    那這幾個文件是否有可能分配的FD不是0、1、2呢? 也就是說這個是固定的還是只是默認(rèn)?

“這三個文件默認(rèn)關(guān)聯(lián)到終端,也就是說stdin關(guān)聯(lián)到鍵盤,stdout...”  
    這三個文件與終端的關(guān)聯(lián)是固定的還是默認(rèn)如此但可以更改呢?

謝謝

作者: blackold    時間: 2012-12-31 10:19
回復(fù) 5# yonka


    默認(rèn)的啊。
作者: yonka    時間: 2012-12-31 10:25
回復(fù) 6# blackold


   
"打開文件時系統(tǒng)才為其分配FD"   
    那這幾個文件是否有可能分配的FD不是0、1、2呢? 也就是說這個是固定的還是只是默認(rèn)?

“這三個文件默認(rèn)關(guān)聯(lián)到終端,也就是說stdin關(guān)聯(lián)到鍵盤,stdout...”  
    這三個文件與終端的關(guān)聯(lián)是固定的還是默認(rèn)如此但可以更改呢?

鳥哥回復(fù)的太簡練了...
是都是默認(rèn)還是只是第二個問題是默認(rèn)第一個則是固定的?


作者: waker    時間: 2012-12-31 10:31
完全等價的
stdin是fd0的英文名字,中文名字是"標(biāo)準(zhǔn)輸入"都是一碼事

另外建議莫鉆牛角尖,不要糾結(jié)于"為什么"1+1=2,習(xí)慣了這就不是問題了,除非你是愛因斯坦
作者: yonka    時間: 2012-12-31 11:10
回復(fù) 8# waker


    其實我不是在糾結(jié)1+1是不是=2呢,而是糾結(jié)1+1等于幾。

如果按照我之前的理解,1不一定等于stdout的話,那么1還可以輸出到其他的文件...(而不是stdout)




作者: waker    時間: 2012-12-31 11:12
1一定等于stdout
作者: reyleon    時間: 2012-12-31 15:57
回復(fù) 1# yonka


    你理解成操作系統(tǒng)就是這么定義的就行了,操作系統(tǒng)定義 fd0 = stdin(標(biāo)準(zhǔn)輸入) ; fd1 = stdout(標(biāo)準(zhǔn)輸出);fd2 = stderr(標(biāo)準(zhǔn)錯誤);這個是使用者無法更改的!
作者: timothyqiu    時間: 2013-01-01 03:53
其實還可以試一下
  1. ls -l /dev/std*
復(fù)制代碼
出來的類似于:
  1. lrwxrwxrwx 1 root root 15 Aug 14 10:02 /dev/stderr -> /proc/self/fd/2
  2. lrwxrwxrwx 1 root root 15 Aug 14 10:02 /dev/stdin -> /proc/self/fd/0
  3. lrwxrwxrwx 1 root root 15 Aug 14 10:02 /dev/stdout -> /proc/self/fd/1
復(fù)制代碼





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2