2012-11-14 154 views
9

我正在學習Unix中的網絡編程,並且正在嘗試理解套接字和文件描述符的概念。從我所瞭解的文件描述符只是指針數組(位於文件描述符表?)中的一個位置,這些指針指向內存中的某個文件。套接字和文件描述符

套接字描述符是否與文件描述符共享此數組,但指針改爲引用套接字。還是有別的東西只用於套接字?

這個數組是否對每個應用程序/進程都是唯一的?

回答

10

是的,套接字也是與文件相同的表中的索引。至少對於UNIX系統(如Linux和OSX),Windows是不同的,這就是爲什麼你不能使用例如readwrite來接收和發送數據。

每個進程都有自己的「文件」描述符表。

+0

是我對文件描述符的解釋否則是正確的,你能說文件描述符表是某種多態嗎? – Carlj901

+0

@ Carlj901是的,有點。文件描述符(由'open'或'socket'返回)是這個表或指針的索引,這些指針可以指向不同的結構,這取決於它是文件還是套接字。 –

1

套接字不過是UNIX操作系統中的一個文件。即使一切都被視爲UNIX操作系統中的文件。每當我們創建一個套接字時,在包含標準I/O和標準錯誤以及其他細節的文件描述符表中進行輸入。文件描述符充當指向文件表的指針,該表包含有關要採取什麼動作的信息,即讀取,寫入等,並且它包含指向該特定文件的inode表的指針,並且您可能知道inode包含所有必要的文件的文件。

+0

在UNIX中將everthing當作文件對待嗎?像所有的過程一樣?此外,套接字文件的外觀如何或它包含什麼? –

相關問題