![](https://i-blog.csdnimg.cn/blog_migrate/a9490afdf8dc98ff11fdef0758b77edf.jpeg)
在Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备的时候,几乎都要通过它来达成的,它究竟是何方神圣呢?随我描述符科学家来一探究竟。
首先,我们在Linux下打开文件用的都是如下代码:
int fd = open(... ...);
当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO的封装,归根结底还是使用open()来打开一个文件。
问题就在于这个“打开”,究竟打开意味着什么呢? 很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说的打开一个文件实际上最重要的是获取这个文件的描述符,描述符是用来表征这个文件的代表物,下面的图清晰地展示了这一点:
内核空间中有一堆数据结构表达一个文件的属性信息,但是用户空间看不见,只看见一个代表了这些信息的整数i,通常我们称之为文件描述符,对文件的读写和ioctl操作都是通过这个东东来达到的呢!