文件描述符(file descriptor)是內核為了高效管理已被打開的文件所創建的索引,其是一個非負整數(通常是小整數),用於指代被打開的文件,所有執行I/O操作(包括網絡socket操作)的系統調用都通過文件描述符。
我對這個問題的理解:
由於unix一切皆文件是思想,所以socket也會被當成文件處理,所以socket描述符和文件描述符本質上是相同的。
所以,假如有一個文件描述符是3,那么當socket創建一個套接字描述符時,不可能為3,因為已經存在與3綁定的文件了,文件描述符和套接字描述符是不可以沖突的。
無論是文件描述符還是socket描述符,都可以通過read和write操作,但是在read和write處理不同類型文件的描述符時,在內部的處理方式不同,比如socket的就是走網絡,普通文件的就是走磁盤IO。這已經屬於多態了。
