首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

文件描述符与文件指针的相互转化

文件描述符与文件指针的相互转化

1文件描述符,在linux系统中,设备也是以文件的形式存在,要对该设备进行操作就必须先打开这个文件,打开这个文件就会获得这个文件描述符,它是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。


文件描述符的优点:兼容POSIX标准,许多Linux和UNIX系统调用都依赖于它。


缺点:不能移植到非UNIX系统上,也不直观。


    文件指针,C语言中使用的是文件指针而不是文件描述符作为I/O的句柄,“文件指针(file pointer)”指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符值。而文件描述符值是文件描述符表中的一个索引。从某种意义上来说,文件指针就是句柄的句柄。


2. 文件指针/句柄(FILE*)、文件描述符以及文件路径(filepath)的相互转换


文件路径 到 文件指针:filepath --fopen()-->FILE*;
文件路径 到 文件描述符:filepath--open()--fd;

文件描述符 到 文件指针:fd--fdopen()-->FILE*;


文件指针 到 文件描述符:FILE*--fileno()--->fd;




3.示列:


int main(int argc, char **argv)
{

FILE *fp;

printf("stdin fileno:%d\n",fileno(stdin));

printf("stdout fileno:%d\n",fileno(stdout));

printf("stderr fileno:%d\n",fileno(stderr));

fp = fopen("aa.c","w+");

printf("aa.c'fileno %d\n",fp->_fileno);

return 0;
}
继承事业,薪火相传
返回列表