2011-09-13 291 views
0

從Beej的socket編程書:瞭解Unix文件描述

當Unix程序做任何形式的I/O,他們通過閱讀或 寫入文件描述符做到這一點。文件描述符只是一個與打開文件關聯的整數 。

是不是說程序讀取「寫」到「整數」?如果是的話,那怎麼可能?它是什麼意思?

回答

1

這就是說文件描述符是作爲一個整數實現的。這就是每個打開的文件都有一個引用它的獨特方式,一個文件句柄實際上只是一個唯一的編號。

當你這樣做:

int fd = open("filename", flags); 

fd是一個整數,這是由實現返回。它是您在程序中打開並提供給您的文件的唯一內容,以便稍後可以引用該文件,例如,對於read/write/close等。它只不過是用於關聯一系列操作的令牌。

+0

,我不明白'文件描述符作爲integer.'詳細精心實施,請。 –

+0

這就是我已經知道,但報價是說,該程序寫入「上」的整數?這是否意味着它們只能使用該整數來引用他們必須使用該整數寫入的文件? –

+0

@Anisha - 報價表示「讀取或寫入文件描述符」。文件描述符就是你從'open'返回的內容。當您調用'read(fd,...)'時,您正在請求從特定的文件描述符中讀取數據。同樣,'write(fd,...)'是寫入特定文件描述符的請求。 – Flexo

2

這意味着爲了從文件讀取或寫入文件,您需要執行系統調用,而您的文件描述符(整數)是一個參數,用於告知內核您正在討論的文件。它們是整數的事實相對來說沒有意義,它們可能是任何東西;你只能透明地使用它們,也就是說,你打開一個文件,存儲描述符,然後將描述符傳遞迴內核,以便對該文件進行任何操作。它的價值只對內核感興趣。一個值得注意的例外是特殊文件描述符0,1和2(stdin,stdout和stderr),但即使對於那些,通常也使用預定義的常量而不是文字整數值。

+0

太棒了,這是否意味着beej的定義是不明確的?他們說這些程序在這個整數上寫「on」。 –

+1

@Anisha:關鍵在「關聯」一詞中。整數*表示文件,而不是文件。說明有點誤導,但IMO並不多。 – tdammers

+0

無論您在閱讀什麼內容,請嘗試與作者一起思考......經常,放入上下文時事情會變得清晰。 – tdammers

2

我在文件描述符和beejs書也苦苦掙扎。啓蒙的時刻是當我明白如何c dup功能的作品。

PS:這是遲到的回答,但也許它可以幫助別人