Linux中文件描述符和socket描述符的关系和区别?


文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作(包括网络socket操作)的系统调用都通过文件描述符。
我对这个问题的理解:
由于unix一切皆文件是思想,所以socket也会被当成文件处理,所以socket描述符和文件描述符本质上是相同的。
所以,假如有一个文件描述符是3,那么当socket创建一个套接字描述符时,不可能为3,因为已经存在与3绑定的文件了,文件描述符和套接字描述符是不可以冲突的。
无论是文件描述符还是socket描述符,都可以通过read和write操作,但是在read和write处理不同类型文件的描述符时,在内部的处理方式不同,比如socket的就是走网络,普通文件的就是走磁盘IO。这已经属于多态了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM