内核会创建一个包含有关您刚刚打开的文件的其他信息的结构。该结构保存信息,例如inode编号,文件在文件系统中的名称,其大小,其关联的超级块等。 事实上,在内核中,VFS(虚拟文件系统)处理对文件的I/O操作,无论是本地文件(在硬盘上)还是远程文件(例如位于FTP服务器上,如ftpfs所做的那样)。 每个GNU/Linux文件系统都实现了相同的打开/读取/写入/关闭文件机制。这确保了每个开发人员无需担心要访问的文件类型,无论您正在与哪种类型的文件交互,都可以使用相同的open()、read()等API。您可以在此处here和here(IBM的精彩文章)找到有关VFS的更多信息。最后,由open返回的每个文件描述符都相对于您的程序,因此您可能要打开的第一个文件将与文件描述符3相关联,以此类推... 在许多GNU/Linux发行版上,可以通过/proc/{pid_of_your_process}找到绑定到每个进程的文件描述符。
如果你真的想深入了解,可以浏览许多Unix变体的源代码。对于Linux,请查看http://lxr.linux.no/#linux+v3.9/fs/open.c -- 搜索SYSCALL_DEFINE3(open,以进入实际的“open”系统调用。