文件描述符:非负整数
一个进程打开或者创建一个文件的时候,返回的就是一个文件描述符
进程通过拿到这个文件描述符
可以将文件描述符理解为linux内核为了高效管理被进程打开的文件创建的索引
0 : 标准输入
1 :标准输出
2 :标准错误
文件描述符限制限制
1:操作系统级别的限制
获取操作系统级别的最大的文件描述符:
sysctl -a|grep fs.file-max
2:进程级别的限制(用户级别的)
ulimit -n
获取用户级别的最大的文件描述符
文件描述符的概念存在两大缺点:
在非UNIX/Linux操作系统上(如Windows NT),无法基于这一概念进行编程。
由于文件描述符在形式上不过是个整数,当代码量增大时,会使编程者难以分清哪些整数意味着数据,哪些意味着文件描述符。因此,完成的代码可读性也就会变得很差。
文件描述符与文件指针的区别编辑
文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的非负整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。
文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符(这 才是最主要的区别)。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。