为什么想了解文件描述符
对于文件描述符这个概念我们也是听的很多了,但关于他具体是什么,我也总是之乎者也。看到了select模型,又提到文件描述符的最大1024数量的限制,觉得有必要了解下了。
不错的文章推荐
这里有很不错的两篇文章:
https://blog.csdn.net/yanjun_1982/article/details/79421528
https://my.oschina.net/iuranus/blog/330397?fromerr=x1SVuj0Z
什么是文件
unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,对我们来说,一切都是文件,一切都是流。在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and output),往流中读出数据,系统调用read,写入数据,系统调用write。
不过话说回来了 ,计算机里有这么多的流,我怎么知道要操作哪个流呢?对,就是文件描述符,即通常所说的fd,一个fd就是一个整数,所以,对这个整数的操作,就是对这个文件(流)的操作。我们创建一个socket,通过系统调用会返回一个文件描述符,那么剩下对socket的操作就会转化为对这个描述符的操作。不能不说这又是一种分层和抽象的思想。
我的理解
文件描述符(fd)就是一个可以定位到文件对象的对象(如果万物皆对象概念的话)
最后说一下select
select模型受文件描述符限制,是由于他使用了文件描述符表,而一个进程的文件描述符表的最大size是一定的。