<Linux基础--文件描述符fd、重定向、文件流指针FILE*概念理解>
文章目录
- 1.文件描述符fd
- 2.重定向
- 3.文件流指针:FILE*
- 4.动态库和静态库
1.文件描述符fd
文件描述符:实际上就是内核中一个进程打开的文件描述信息数组(file* fd_array[])的下标,通过这个下标就能找到要操作的文件的描述信息,进而就可访问文件。
Linux进程默认打开的三个文件描述符:标准输入0、标准输出1、标准错误2.
因此文件描述符fd=0就表示标准输入,fd=1表示 标准输出,fd=2表示标准错误。
文件描述符的分配规则:在files_struct数组中,找到当前没有被使用的最小的一个下标,作为新的文件描述符。由于0、1、2描述符已经被使用,所以再输出至少是3,除非0、1、2中有关闭的才会小于3.
2.重定向
重定向原理:通过改变文件描述符这个下标对应的文件描述信息,进而改变了要操作的文件,实现了数据流向的改变。
重定向实现接口函数(dup2):int dup2(int oldfd, int newfd);意思是说newfd是oldfd的一份拷贝,也就是说让newfd也指向了oldfd文件。比如让标准输出文件输出到指定test.txt文件中:int fd=open("./test.txt",O_RDWR),dup2(fd,1)。
追加重定向(>>):保持文件原内容不变,将新数据追加到文件末尾。
清空重定向(>):清空文件原有的内容,将新数据写入文件中。
3.文件流指针:FILE*
库函数都有:fopen、fwrite、fread、fclose、fseek,printf、fprintf、fgets…等
系统调用接口:open、write、read、close、lseek
库函数和系统调用接口的关系:库函数是对系统调用接口的封装,其实现了更多特定功能场景的复杂接口,但是库函数最终要实现功能还是要借助系统调用接口来实现。两者之间的区别是:库函数会自带缓冲区,等到程序退出或刷新缓冲区时才统一输出或写入文件;而系统调用没有带缓冲区。
文件流指针:FILE* ----对应库函数
文件描述符:int ----对应系统调用接口
文件流指针是一个结构体(fille_struct),其中内部有一个成员变量就是文件描述符。当我们通过库函数操作文件流指针,最终会演变为通过系统调用操作描述符。
文件流指针和文件描述符关系:文件流指针是个结构体,其封装了文件描述符。
4.动态库和静态库
gcc/g++的链接方式:动态链接、静态链接—默认方式是动态链接。
动态链接:链接动态库,只在生成可执行程序时记录文件的函数符号信息表,并没有把代码实现写入可执行程序中,因此程序运行时需要依赖动态库的存在,并且将动态库也要加载到内存中,好处是多个进程用到相同的库函数,则可以在内存中使用同一份库函数。
静态链接:链接静态库,在生成可执行程序时,直接将使用到的库函数的实现拿出来写入到可执行程序中,因此生成的可执行程序较大,但是运行的时候不需要依赖静态库的存在。
动态库的优点:共享、代码冗余小,便于模块代码替换,当一些模块化,便于功能替换的一些借口则使用动态库。
静态库的优点:依赖性低,当功能改动性小,并且只有当前程序使用的时候使用静态库。
动态库(.so)的生成:gcc --shared testlib.o… -o libtestlib.so
静态库(.a)的生成:ar -cr libtestlib.a testlib.o…
<Linux基础--文件描述符fd、重定向、文件流指针FILE*概念理解>相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- GroovyQ | 关注Groovy社区动态,分享Groovy开发经验。
- 看别人的C/C++代码时发现自己所不知道的语法~
- Windows系统软件推荐
- http method
- 清理jdk注册表_JDK 9早期版本安装后的Windows注册表清理
- rest spring_Spring的REST服务发现性,第5部分
- 面试官系统精讲Java源码及大厂真题 - 12 彰显细节:看集合源码对我们实际工作的帮助和应用
- Python实现共现语义网络
- Flutter的生命周期
- 删除字符串中的元音字母
- 线性代数笔记11:正定矩阵理解及推导
- 复大华韬会基因博物馆项目论证会在北京大学举行
- Java静态绑定与动态绑定
- Altium Designer 18中的Multi-board Schematic–Defaults
- Google Scholar特别好用的镜像网站链接
- 仿真软件测试工程师麦克,仿真工程师面试经验 - 共61条真实仿真工程师面试经验分享 - 职业圈...
- 从企业钉钉的接口获取数据
- 公司破产了股需要东承担哪些责任
- 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)
- 4.关于 “ 写完括号里面代码,如何快速跳出 ”
热门文章
- psychopy写stroop实验
- python创建数组放入矩阵_python数组和矩阵使用总结
- maven copy子模块 resources_查漏补缺,工程化——Maven这七个问题你会吗?
- PostgreSQL表的查询(难度适中)
- web前端开源框架_9个用于前端Web开发的开源CSS框架
- vue引入three.js3维地图_vue-chartjs使用 Chart.js 和 Vue.js 搭建简单和漂亮的图表
- vue:extend和mixin的区别
- C++: Left-pad(团体程序设计天梯赛)
- linux服务端代理设置与linux下载工具
- Java的SHA1PRING方式AES加密对应的PHP写法