Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31945
  • 博文数量: 19
  • 博客积分: 665
  • 博客等级: 上士
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-23 23:11
文章分类

全部博文(19)

文章存档

2014年(1)

2012年(2)

2011年(1)

2010年(12)

2009年(3)

我的朋友

分类: C/C++

2010-06-03 22:36:50

   “文件描述符,在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;// 这个的直接转换的方法还没有查到。请补充。

 

 

后记:

open系列:Unix/Linux等将一切视为文件的OS的操作一切的方法。在linux中,fd很强势,对于各种设备畅通无阻。但是,可移植性一般。

fopen系列:标准C的支持。有ISO C做背景,傲视群雄。文件操作就靠它了。

linux潮流捧红了open,C的无处不在给了fopen巨大的舞台。但是这两个系列的操作功能基本一致,最烦的是“偶有不同”。希望能够在不久的将来,文件操作大一统。再也不用进行各种转换和烦人的记忆了。

阅读(304) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~