| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> Linux基础IO -> 正文阅读 |
|
[C++知识库]Linux基础IO |
目录 C文件接口1.fopen作用:打开文件
mode打开文件的方式: 'r' 只读方式打开,将文件指针指向文件头,如果文件不存在,则返回空。 2.fwrite作用:往文件中写 3.fread作用:从文件中读
4.fseek作用:移动文件流指针的位置
?5.代码验证
运行结果正确:
?系统调用文件接口1.open作用:打开文件 2.write作用:往文件中写 3.read作用:从文件中读 4.lseek5.代码验证
?运行结果正确: ?文件描述符文件描述符的值&含义
Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2。0,1,2对应的物理设备一般是:键盘,显示器,显示器
?。
如下代码:
?我们发现,拿到的文件描述符是3,这是一个正数,那么这个小正整数是什么意思呢?可以通过以下命令进入到指定文件夹查看文件描述符信息: 其中的软连接文件的名字,正好对应文件描述符的值。那么站在操作系统内核的角度上,又如何理解呢?请看下面这张图: ?当我们打开文件时,操作系统在内存中要创建相应的数据结构来 描述目标文件。于是就有了fifile结构体。表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进 程和文件关联起来。每个进程都有一个指针*fifiles, 指向一张表fifiles_struct,该表最重要的部分就是包涵一个指针数 组,每个元素都是一个指向打开文件的指针!所以,本质上,文件描述符就是该数组的下标。以,只要拿着文件 描述符,就可以找到对应的文件。 文件描述符与文件流指针的联系文件流指针指向的结构体中保存了文件描述符,直接来看Linux的源代码(有省略): 那么到底是不是这样呢?来一段代码验证一下: ?运行结果正确。 重定向重定向接口: ?作用:将newfd的值重定向为oldfd ?为什么会打印到屏幕上呢? 前面讲过文件描述符其实是一个结构体指针数组的下标,那么重定向就是改变了其中指针的指向(相当于一个指针变量拷贝了另一个指针变量的值),使本来指向文件1.txt对应的结构体的指针指向了标准输出,所以就打印到了屏幕上。如下图所示: 动态库与静态库静态库如下代码,将两个.o文件打包为静态库文件: ?这时候,只要有了静态库文件和头文件就可以正常使用了,如下,先创建一个.c文件,包含头文件后调用一下静态库中的函数: ??此时有报错,那么怎么解决这个问题呢?我们来写一个makefile,来解决这个问题: ?这样代码就可以正常执行了, 注意:程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。此时生成的可执行程序比较大。 动态库我们此时还是使用静态库的那些.c文件,依照以上命令先生成一个动态库: 然后再来使用: ?此时我们make一下,看是否可以生成可执行文件: ?此时并没有运行成功,为什么呢?使用ldd命令查看一下可执行程序依赖的库: 那么怎样解决这个问题?其实只需要进入~/中将.bashrc文件中的环境变量LD_LIBRARY_PATH 加上当前动态库的路径就可以了,如下: ?此时就可以运行成功了。如果不想配置环境变量,还有两种方法可以使可执行程序链接到动态库: 1.将动态库放到可执行程序的路径下(不推荐) 2.将动态库放到系统库的路径下 :/lib64(不推荐) |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:47:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |