最近在linux下编程常需要对一些文件进行操作。有时不同的条件下,需要将文件指针/句柄(FILE*)、文件描述符(fd)以及文件路径(filepath)进行相互转换,以满足实际的编程需要。

现简单的做一下整理。如下。

1:文件路径 文件描述符应是唯一的。文件指针(值)不是唯一的,但指向的对象也应该是唯一的。

2: FILE*中包含fd的信息,而且还包含IO缓冲,所以可以理解为FILE*是对fd的封装,是C的标准形式,所以FILE*比fd更适合跨平台,应多用fopen,少用 open。

3:转换

文件路径 到 文件指针:filepath --fopen()-->FILE*;

文件路径 到 文件描述符:filepath--open()--fd;

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

文件描述符 到 文件路径:fd--readlink(/proc/%getpid()/fd/%fd"))-->filepath;

详细参考 《linux c 文件描述符 得到 文件名》 https://blog.csdn.net/whatday/article/details/114916142

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

详细参考 《linux c fopen open 互相转换 文件指针 到 文件描述符 FILE* 转 FD》https://blog.csdn.net/whatday/article/details/114916313

linux c 文件指针 句柄(FILE*) 文件描述符(fd) 文件路径(filepath) 互相转换相关推荐

  1. <Linux基础--文件描述符fd、重定向、文件流指针FILE*概念理解>

    文章目录 1.文件描述符fd 2.重定向 3.文件流指针:FILE* 4.动态库和静态库 1.文件描述符fd 文件描述符:实际上就是内核中一个进程打开的文件描述信息数组(file* fd_array[ ...

  2. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析

    本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下. 1.文件描述符fd的定义:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进 ...

  3. 文件描述符fd和文件指针File* fp的区别和转换

    在linux系统中把设备和普通文件也都看做是文件,要对文件进行操作就必须先打开文件,打开文件后会得到一个文件描述符,它是一个很小的正整数,是一个索引值.  内核会为每一个运行中的进程在进程控制块pcb ...

  4. linux存储--文件描述符fd与FILE结构体(二)

    文件描述符fd 对于linux而言,所有对设备(对于linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表. ...

  5. ftpclient读取服务器文件能获得文件名文件大小0_理解Linux的文件描述符FD与Inode

    FD 文件描述符 一.概念 Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被 ...

  6. linux文件描述符与标识符,文件描述符fd

    这里以问答的方式来讨论这个问题: 1. 文件描述符 fd 和文件指针 FILE *的关系? 文件描述符是什么?我们知道每一个进程都有一个自己的PCB(进程控制块),进程控制块的结构是: struct ...

  7. 嵌入式Linux系统编程学习之九基于文件描述符的文件操作

    文章目录 前言 一.文件描述符 二.打开.创建和关闭文件 三.读写文件 四.改变文件大小 五.文件定位 六.原子操作 七.进一步理解文件描述符 八.文件描述符的复制 九.文件的锁定 十.获取文件信息 ...

  8. linux进程文件描述符 vnode,Linux C编程详解:进程原理分析、文件描述符和文件记录表、文件句柄和文件原理...

    一.引言 文件操作是Linux C编程中其中的一项核心技术,实际上也相当重要,这里并不是说狭义上的那种文件操作,它也非常有助于理解和学习Linux系统.为什么这样说呢?因为在Unix/Linux的世界 ...

  9. Linux - fd文件描述符和文件详解

    ​​​​​​​             ​​​​​​​  感谢各位 点赞 收藏 评论 三连支持 本文章收录于专栏[Linux系统编程] ❀希望能对大家有所帮助❀ 本文章由 风君子吖 原创 ​​​​​​ ...

最新文章

  1. java list 自定义类型转换_java – 可以从List生成平面XML结构的XStream自定义转换器?...
  2. 20Composite(组合)模式
  3. 利用redis List队列简单实现秒杀 PHP代码实现
  4. android gradle 语法,Gradle 1.语法
  5. Linux系统 设置 cockpit 自动开机启动时异常问题处理(设置systemctl enable cockpit 异常【解决办法】)
  6. 超多的CSS3圆角渐变网页按钮
  7. 欣赏多彩的计算机作品教案,三年级上信息技术教案-欣赏多彩的计算机作品(一)云南版...
  8. 观点对立,无关虚拟现实技术
  9. Java Class对象
  10. Node.js入门(含NVM、NPM、NVM的安装)-(转载)
  11. 单元测试报告软件测试,软件单元测试报告-模板
  12. html几种美丽的分割线
  13. 夜神与android链接,夜神安卓模拟器连接adb的方法步骤
  14. ubuntu系统下抓取屏幕
  15. 大数据的“多维度”与“时效性”
  16. 莫队算法小介绍——看似暴力的莫队算法
  17. ironbot智能编程机器人_小小工程师启蒙教练就选IronBot机器人套件
  18. iOS 7 之Airdrop 分享
  19. 【数据库】GaussDB客户端工具介绍
  20. 关于我在刷题时用OJ判题发现的cout相较于printf严重超时的问题

热门文章

  1. oracle 三表关联更新_Oracle数据库入门
  2. kafka怎么查看消息堆积_Kafka集群消息积压问题及处理策略
  3. ci github 通知_初探CI,Github调戏Action手记——自动构建并发布
  4. 使用 Amazon Cloud WAN 构建您的全球网络
  5. Tungsten Fabric SDN — 与 OpenStack 的集成部署
  6. Ceph 故障修复记录(持续更新)
  7. KVM — 开启嵌套虚拟化
  8. 添加Altium Designer 3D封装
  9. python-简单测试wsgi
  10. Android float 四舍五入没有入的一个问题