亚洲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
其實還可以試一下
ls -l /dev/std*
復(fù)制代碼
出來的類似于:
lrwxrwxrwx 1 root root 15 Aug 14 10:02 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Aug 14 10:02 /dev/stdin -> /proc/self/fd/0
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