Linux文件描述符

在Linux操作系统上,把一切都看作是文件。Linux中的文件分为:普通文件、目录文件、链接文件和设备文件。

标准输入输出设备是一种设备文件,分别为:标准输入STDIN_FILENO(0),标准输出STDOUT_FILENO(1),出错处理STDERR_FILENO(2)。为了使用这个文件需要得到它的文件描述符,后面的0、1、2就是标准输入、标准输出、出错处理的文件描述符,程序通过标准输出的文件描述符,从中写入内容,可以达到屏幕显示功能。

对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,用open或creat返回的文件描述符标识该文件,将其作为参数传送给read或write。

文件描述符(file descriptor)在程序中定义为一个整型变量,相关操作有create、delete、open、close、read、wirte、seek,一般程序返回负数表示操作失败。例如将一个通用设备连接到Linux系统上,系统将它看作是一个文件,通过open函数(系统调用接口)和路径名获得它的文件描述符,在程序里使用相关函数对其进行操作。

在win32中有一个文件句柄(file handle)的概念,句柄用来管理不同的对象资源,比如窗口、对话框、画布、按钮、文件等等,应用程序能够通过句柄访问相应的对象的信息。它和Linux中的文件描述符还是有区别。

参考资料:
http://blog.csdn.net/linuxmichael/article/details/5156790
http://ciwnet.blog.sohu.com/48825936.html
http://blog.csdn.net/thefinals/article/details/7177720