| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 13.Linux 文件IO编程 -> 正文阅读 |
|
[系统运维]13.Linux 文件IO编程 |
面向过程 *把问题分解为一系列的步骤 *在函数里面一步一步实现这些步骤 *根据实际?需求调用函数 面向对象 *把构成问题的事物分解成一个一个的对象 *调用对象里面的方法属性解决问题 *面向对象有助于维护和扩展代码 面向对象三大特性 *封装性:隐藏封装内部的一些细节 *继承:复用现有的代码 * ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一切皆文件???????? Linux内核 屏蔽硬件区别,把所有的硬件设备抽象成文件,提供统一的接口给用户使用 虚拟文件系统: 抽象层、对文件的访问实际上是对抽象层的访问。 抽象对象:封装了底层读写细节,使用C语言的多态来实现具体文件系统的接口 普通文件系统: -ext4 -fat32 -ubifs 特殊文件系统: -进程文件系统:procfs,挂载在/proc,存放进程相关信息,任务管理器。 -设备文件系统:devfs,挂载在/dev。存放硬件操作相关的接口。 ????????????????????????????????????????????????文件描述符和打开模式 系统IO编程 *open *write *read *iseek *close 伪代码: int fd; fd=open(filename,flags,mode); iseek(fd,offset,whence); write(fd,buf,write_len); read(fd,buf,read_len); close(fd); 文件描述符 特殊的索引 实际上就是进程中file_struct结构体成员fd_array的数组下标 文件的打开模式 主模式: *O_RDONLY:只读模式 *O_WRONLY:只写模式 *O_RDWR:读写模式 副模式: O_CREATE:当文件不存在,需要去创建文件 O_APPEND:追加模式(把这个文件的读写位置设置到文件的尾巴) O_DIRECT:直接IO模式(write函数和read函数里面读取的数据不需要通过页缓存区) O_SYNC:同步模式(所有数据都会从页缓存区写到磁盘里面去) O_NOBLOCK:非阻塞模式() 进程 每个程序本质上就是一个进程 标准IO编程 ????????????????????????????????????????????????open_close函数 OPEN函数 头文件: 函数原型: - 当文件存在时: 例子: 当文件不存在时: ①pathname ②flags:文件的打开模式 主模式:1.O_RDONLY:只读模式? ? ? ? ? ? 2 .O_WRONLY:只写模式? ? ? ? ? ? ? ?3.O_RDWR:读写模式 副模式:1.O_CREATE:当文件不存在,需要去创建文件(剩下的用到再说吧) O_APPEND:追加模式 O_DIRECT:直接IO模式 O_SYNC:同步模式 O_NOBLOCK:非阻塞模式 ③perms:指定文件权限如0777,0666.
返回值 成功:文件描述符 失败:-1 CLOSE函数 头文件: 函数原型: 返回值: 成功:0 失败:-1 lseek函数 ?使用lseek函数之前先要包含头文件#include <unistd.h> ?函数原型 需要三个参数 { ? ? ? ? 1.int fd:用open文件返回来的文件描述符 ? ? ? ? 2.void *buff:读取文件后所需要填充到的buff地址 ? ? ? ? 3.size_t count:返回值 成功: ①返回值为count:成功读取全部字节 ③失败: -1,读取错误 }? ?write函数 使用write函数之前需要包含头文件同read函数的头文件一样#include <unistd.h> ?函数原型(跟read函数很像) { ①int fd:用open文件返回来的函数描述符 ②void *buff:写入内容的buff地址,例如(“123”) ③size_t count:返回值? (字节数) 如果成功:①count:成功写入全部字节 如果失败:?-1,读取错误 } 实现复制普通文件功能的小实验
1、打开要复制的文件 2、创建新的文件 3、把源文件内容读到缓冲区,把缓冲区内容写入新文件 4、循坏执行第三步,直到读取的字节数量为0,退出循坏。 5、关闭打开的文件
?
? ?这样就可以把1.txt的内容复制到2.txt里面 lseek函数 lseek函数的功能主要是设置文件读写位置 ?使用lseek函数之前需要包含头文件#include <unistd.h> ?函数原型 { 1.(int?fd)调用open函数返回的文件描述符 2.(off_t offset):设计一个偏移量 3.(int whence):相对的基准点 若whence为SEEK_SET,基准点为文件开头 返回值 如果成功:返回值等于文件偏移位置值 如果失败:返回值等于-1 } 例如:
?sync函数 ?页缓存和回写功能:强制把修改过的页缓存区数据写入磁盘 ?使用sync函数时需要包含头文件#include <unistd.h> ?函数原型:void sync(void); 返回值 无 这个sync实验结果不明显,以后碰到再写过! 使用sync()函数就能保证write里面的数据能够及时写入磁盘里面去
?标准IO函数 C标准库实现了一个IO缓存区 常见标准IO函数 ①fopen 打开一个文件 ②fclose 关闭一个文件 ③fread 读取文件内容 ④fwrite 把内容写到文件里面去 ⑤fseek 设置文件的读写位置 ⑥fflush ? 强制把IO缓存区的数据写入到页缓存区 文件IO五大模式 ①阻塞模式 ? 好了睡觉。。。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/15 17:34:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |