当前位置: 首页 > 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);
}

相关文章:

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

本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容&#xff0c;具体介绍如下。 简介 1.文件描述符fd的定义: 文件描述符在形式上是一个非负整数。实际上&#xff0c;它是一个索引值&#xff0c;指向内核为每一个进程所维护的该进程打开文件的记录表。当…...

C++11线程

C11线程 创建线程 创建线程需要包含头文件<thread>&#xff0c;使用线程类std::thread 构造函数 默认构造函数 thread() noexcept; 默认构造函数&#xff0c;构造一个线程对象&#xff0c;但它不会启动任何实际的线程执行。 任务函数构造函数 template< class Fun…...

VIVO应用商店评论数据抓取

VIVO应用商店的app评论数据抓取 每个应用的评论能获取到最新的 100页 数据 每页20条&#xff0c;也就是 2000条评论数据 接口&#xff1a; pl.appstore.vivo.com.cn/port/comments/ 爬取运行截图&#xff1a;...

第00章_写在前面

第00章_写在前面 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.comhttp://www.atguigu.com/) 一、MySQL数据库基础篇大纲 MySQL数据库基础篇分为5个篇章&#xff1a; 1. 数据库概述与MySQL安装篇…...

​测绘人注意,你可能会改变历史!

你也许想不到&#xff0c;曾经有一个测绘人员在进行实地测量作业时&#xff0c;在地图上就这么随手一标注&#xff0c;却让这个地方成为了如今的网红打卡地。 这个地方就是外地游客慕名而来的“宽窄巷子”&#xff0c;如果连这个地方都不知道的成都人&#xff0c;就应该不能算…...

MySQL - 慢查询

慢查询日志用于记录执行时间超过设定的时间阈值的 SQL 查询语句。它的目的是帮助数据库管理员识别和优化执行时间较长的查询&#xff0c;以提高数据库性能&#xff1a; 慢查询定义&#xff1a;慢查询日志记录那些执行时间超过 long_query_time 参数设定的时间阈值的 SQL 查询语…...

go中“哨兵错误”的由来及使用建议

“哨兵错误&#xff08;sentinel error&#xff09;”这个词的出处。之前我也只是在一些书籍和资料中见到过&#xff0c;也没深究。当这个网友问了我之后&#xff0c;就深入的翻了翻资料&#xff0c;在golang的官方博客中找到了这个词的提法&#xff0c;也算是比较官方的了吧。…...

【Python百练——第2练】使用Python做一个猜数字小游戏

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…...

Power BI 傻瓜入门 18. 让您的数据熠熠生辉

本章内容包括&#xff1a; 配置Power BI以使数据增量刷新发现使用Power BI Desktop and Services保护数据集的方法在不影响性能和完整性的情况下管理海量数据集 如果有更新的、更相关的数据可用&#xff0c;旧数据对组织没有好处。而且&#xff0c;老实说&#xff0c;如果数据…...

什么是车规级芯片?一起探讨车规级芯片NCV8705MTADJTCG LDO线性稳压器 工作原理、特性参数

关于车规级芯片&#xff08;Automotive Grade Chip&#xff09;&#xff0c;车规级芯片是专门用于汽车行业的芯片&#xff0c;具有高可靠性、高稳定性和低功耗等特点&#xff0c;以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元&#xff08;ECU&#xff09;和…...

Stream流基础使用

目录 Stream出现时间: 作用: 什么是 Stream? 生成流 forEach map filter limit...

防数据泄密的解决方案

防数据泄密的解决方案 安企神数据防泄密系统下载使用 现代化企业离不开信息数据&#xff0c;数据对企业的经营至关重要&#xff0c;也是企业发展的命脉。为了保护公司数据不被泄露&#xff0c;尤其是在防止数据泄密方面&#xff0c;公司面临着巨大的挑战&#xff0c;需要采取…...

禁用swagger

springfox: documentation: auto-startup: false...

Mysql数据库中的用户管理与授权

ddl: create drop alter dml&#xff1a;对数据进行管理update insert into delete truncate dql:查询语句 select dcl:权限控制语句grant revoke 创建用户 create user 用户名主机 identified by 密码 加密 SELECT PASSWORD(密码); #先获取加密的密码 CREATE USER lisiloca…...

wireshark捕获DNS

DNS解析&#xff1a; 过滤项输入dns&#xff1a; dns查询报文 应答报文&#xff1a; 事务id相同&#xff0c;flag里 QR字段1&#xff0c;表示响应&#xff0c;answers rrs变成了2. 并且响应报文多了Answers 再具体一点&#xff0c;得到解析出的ip地址&#xff08;最底下的add…...

Linux学习-kubernetes之Ingress

资源下载 IngressController IngressYAML Ingress安装部署 #1.将下载的ingress.tar.gz通过docker的方式导入harbor仓库 [rootmaster ingress]# docker load -i ingress.tar.xz [rootmaster ingress]# docker images|while read i t _;do[[ "${t}" "TAG"…...

diamond大基因序列快速比对工具使用详解-包含超算集群多节点计算使用方法

Diamond是一款快速的序列比对工具&#xff0c;其使用方法如下&#xff1a; 1. 安装Diamond&#xff1a; 可从官方网站&#xff08;https://github.com/bbuchfink/diamond/releases&#xff09;下载安装包&#xff0c;并安装到本地电脑中。当然还有docker&#xff0c;conda以及…...

最新ai系统ChatGPT商业运营版网站源码+支持GPT4.0/支持AI绘画+已支持OpenAI GPT全模型+国内AI全模型+绘画池系统

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

ffmpeg x264 x265 fdk-aac 编译记录

ffmpeg 裁剪定制编译过多次了 这里记录下 主题部分 关于ffmpeg自定义编解码器 FFmpeg codec HOWTO - MultimediaWiki 一 环境 ubuntu 18.04 ffmpeg: v4.2.2 ndk :android-ndk-r20b-linux-x86_64 fdk-aac 0.1.5 x264: 0.164.x 1.1 下载编译fdk-aac wget http://ja…...

K8s集群

统一时间&#xff1a;ntpdate(都做) ntpdate -b ntp1.aliyun.com */1 * * * * /usr/sbin/ntpdate -b ntp1.aliyun.com systemctl status docker vi /etc/docker/daemon.json systemctl restart docker m: vim kubernetes.sh cat >> /etc/yum.repos.d/kubernetes.repo…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

Axure零基础跟我学:展开与收回

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...

如何优雅地绕过限制调用海外AI-API?反向代理与API中转技术详解​

阅读时长​​ | 8分钟 ​​适用读者​​ | 需要跨境调用OpenAI等AI服务的开发者/企业 ​​一、问题背景&#xff1a;为什么需要代理&#xff1f;​​ 最近在技术社区看到这样的求助&#xff1a; "公司服务器在国内&#xff0c;但业务需要调用OpenAI接口&#xff0c;直接访…...

【自然语言处理】大模型时代的数据标注(主动学习)

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;FreeAL: Towards Human-Free Active Learning in the Era of Large Language Models发表情况&#xff1a;2023-EMNLP作者单位&#xff1a;浙江大…...