当前位置: 首页 > news >正文

Linux文件描述符和文件指针互转

本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下。

简介

1.文件描述符fd的定义:

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

2.文件指针FILE定义说明文件指针的一般形式为

FILE *指针变量标识符;

其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。

使用系统调用的时候用文件描述符的时候比较多,但是操作比较原始。C库函数在I/O上提供了一些方便的包装(比如格式化I/O、重定向),但是对细节的控制不够。

如果过度依赖其中的一种只会徒增麻烦,所以知道两者的转换是很有必要的。FILE*是对fd的封装

glibc库提供了两个转换函数fdopen()和fileno(),都是<stdio.h>中的

api函数解析

文件路径 到 文件指针

 #include <stdio.h>FILE *fopen(const char *pathname, const char *mode);
/*
pathname:文件路径
mode:打开文件的方式
*/

文件路径 到 文件描述符

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags);
/*
pathname:文件路径
flags:打开文件的属性
*/

文件描述符 到 文件指针

 #include <stdio.h>FILE *fdopen(int fd, const char *mode);
/*
fd:文件描述符
mode:必须和此文件描述符对应文件的权限一样
*/

文件指针 到 文件描述符

 #include <stdio.h>
int fileno(FILE *stream);

示例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{//打开文件int fd = open("filef", O_RDWR | O_CREAT,0600);FILE * filePtr = fopen("filef", "r+");//转换FILE tempPtr = fdopen(fd,"r+");int tempFd = fileno(filePtr);//关闭文件close(fd);fclose(filePtr);
}
http://www.lryc.cn/news/212689.html

相关文章:

  • C++11线程
  • VIVO应用商店评论数据抓取
  • 第00章_写在前面
  • ​测绘人注意,你可能会改变历史!
  • MySQL - 慢查询
  • go中“哨兵错误”的由来及使用建议
  • 【Python百练——第2练】使用Python做一个猜数字小游戏
  • Power BI 傻瓜入门 18. 让您的数据熠熠生辉
  • 什么是车规级芯片?一起探讨车规级芯片NCV8705MTADJTCG LDO线性稳压器 工作原理、特性参数
  • Stream流基础使用
  • 防数据泄密的解决方案
  • 禁用swagger
  • Mysql数据库中的用户管理与授权
  • wireshark捕获DNS
  • Linux学习-kubernetes之Ingress
  • diamond大基因序列快速比对工具使用详解-包含超算集群多节点计算使用方法
  • 最新ai系统ChatGPT商业运营版网站源码+支持GPT4.0/支持AI绘画+已支持OpenAI GPT全模型+国内AI全模型+绘画池系统
  • ffmpeg x264 x265 fdk-aac 编译记录
  • K8s集群
  • 生产级 React 框架介绍
  • 如何理解 Spring Boot 中的 Starter?
  • vue-query的使用
  • git本地搭建服务器[Vmware虚拟机访问window的git服务器]
  • 【Python】基础练习题
  • 语雀故障与反思,顺便再领半年会员!
  • PYTHON利用SQLAlchemy库高效操作关联的数据表
  • TypeScript中的类型工具
  • File --JAVA
  • 比较Excel中的两列目录编号是否一致
  • pgsql 创建自增ID , 指定自增ID起始值