fd 和 file 2010.6.3
时间:2010-06-03 来源:lixin1986red
“文件描述符,在linux系统中,设备也是以文件的形式存在,要对该设备进行操作就必须先打开这个文件,打开这个文件就会,就会获得这个文件描述符,它是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。文件描述符的优点:兼容POSIX标准,许多Linux和UNIX系统调用都依赖于它。文件描述符的缺点:不能移植到UNIX以外的系统上去,也不直观。
文件指针,C语言中使用的是文件指针而不是文件描述符做为I/O的句柄."文件指针(file pointer)"指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符值.而文件描述符值是文件描述符表中的一个索引.从某种意义上说文件指针就是句柄的句柄。” ------摘自某一个论坛 文件指针/句柄(FILE*)、文件描述符(fd)以及 文件路径(filepath)的相互转换 最近在linux下编程常需要对一些文件进行操作。有时不同的条件下,需要将文件指针/句柄(FILE*)、文件描述符(fd)以及文件路径(filepath)进行相互转换,以满足实际的编程需要。 文件路径 到 文件指针:filepath --fopen()-->FILE*;
文件路径 到 文件描述符:filepath--open()--fd; 文件描述符 到 文件指针:fd--fdopen()-->FILE*;
文件描述符 到 文件路径:fd--readlink(/proc/%getpid()/fd/%fd"))-->filepath; //这属于“曲线救国” 文件指针 到 文件描述符:FILE*--fileno()--->fd;
文件指针 到 文件路径:FILE* --- ??? ---PATH;// 这个的直接转换的方法还没有查到。请补充。 转自:http://blog.csdn.net/jenghau/archive/2010/04/27/5532265.aspx
文件指针,C语言中使用的是文件指针而不是文件描述符做为I/O的句柄."文件指针(file pointer)"指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符值.而文件描述符值是文件描述符表中的一个索引.从某种意义上说文件指针就是句柄的句柄。” ------摘自某一个论坛 文件指针/句柄(FILE*)、文件描述符(fd)以及 文件路径(filepath)的相互转换 最近在linux下编程常需要对一些文件进行操作。有时不同的条件下,需要将文件指针/句柄(FILE*)、文件描述符(fd)以及文件路径(filepath)进行相互转换,以满足实际的编程需要。 文件路径 到 文件指针:filepath --fopen()-->FILE*;
文件路径 到 文件描述符:filepath--open()--fd; 文件描述符 到 文件指针:fd--fdopen()-->FILE*;
文件描述符 到 文件路径:fd--readlink(/proc/%getpid()/fd/%fd"))-->filepath; //这属于“曲线救国” 文件指针 到 文件描述符:FILE*--fileno()--->fd;
文件指针 到 文件路径:FILE* --- ??? ---PATH;// 这个的直接转换的方法还没有查到。请补充。 转自:http://blog.csdn.net/jenghau/archive/2010/04/27/5532265.aspx
后记:
open系列:Unix/Linux等将一切视为文件的OS的操作一切的方法。在linux中,fd很强势,对于各种设备畅通无阻。但是,可移植性一般。
fopen系列:标准C的支持。有ISO C做背景,傲视群雄。文件操作就靠它了。
linux潮流捧红了open,C的无处不在给了fopen巨大的舞台。但是这两个系列的操作功能基本一致,最烦的是“偶有不同”。希望能够在不久的将来,文件操作大一统。再也不用进行各种转换和烦人的记忆了。
相关阅读 更多 +