02.文件IO

news2024/12/28 13:14:16

文件描述符

表述打开的文件的

它是open函数的返回值,一个进程启动之后,会默认打开3个文件标识符

0标准输入,1标准输出,2标准错误

新的打开的文件返回文件描述符表中未使用过的最小的文件描述符

open函数

用来打开或者新建一个文件

函数原型

int open(const char *pathname, int flags)
int open(const char *pahtname,int flags,mode_t mode)
pathname–>打开或者新建的文件的路径
flags–>文件的访问模式同时可以选择多个,用’ | '连接

必选:O_RDONLY、O_WRONLY、O_RDWR(三选一)

可选:O_APPEND(偏移量到最后)、O_CREAT(文件不存在创建出来,访问权限,有掩码)、O_EXCL(出错返回)

O_TRUNC(如果文件存在,将其长度阶段为0字节)

返回值:

成功返回未被占用的最小的文件描述符

失败则返回-1

open(“a.txt”,O_RDWR | O_CREAT, 0644)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

rwx中的x对于目录而言,是可以进入这个文件
对于文件而言,是表示这个文件是可执行文件

阻塞与非阻塞(O_NONBLOCK)

阻塞发生的前提是有阻塞事件的发生,例如去IO磁盘中的数据,进程会阻塞
但是普通文件读取数据是在内核缓冲区中,不会发生阻塞事件
所以:
普通文件默认是非阻塞的
设备、管道和套接字文件默认是阻塞的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

close函数

函数描述

关闭文件的

函数原型

int close(int fd)

返回值

成功返回0

失败返回-1

read函数、write函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

把a中的文件读取到缓冲区里,然后再把缓冲区的内容放a中,放入的内容为追加

但是把a中的文件读取后放b中,放入的内容为覆盖

这是因为一个文件再被读取之后,会改变它的偏移量到最末尾,所以a中的读取后再写a中属于追加

lseek函数

函数原型

off_t lseek(int fd,off_t offset,int whence)

函数参数

offset+SEEK_SET–>设置偏移量为offset
offset+SEEK_CUR–>设置偏移量为当前cur+offset
offset+SEEK_END–>负数(end-)整数(扩容)

返回值

成功返回新的偏移量
失败返回-1

常用

lseek(fd,0,SEEK_SET);
int len=lseek(fd,0,SEEK_CUR);
int len=lseek(fd,0,SEEK_END);
lseek(fd,n,SEEK_END);(扩展后需要执行一次写操作才能操作成功)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

面试

1.知道为什么有这个知识点

2.知道知识点的使用场景

3.背一个知识点可以从它的名字开始

系统调用

系统调用是进入内核态的入口,只有在内核态的时候才能管理硬件资源

索引

名字:–>搜索+下标

索引是用来快速查找数据的一种数据结构 (类比字典和目录)

二叉搜索树(不平衡,可以退化成链表O(n)查找)–>平衡二叉树(层数高,磁盘IO读取多)–>B树(多叉树)–>B+树(数据都在叶子结点的多叉平衡树)

事务

交易要么成功要么失败

fcntl函数

用来获取或修改文件访问权限(状态)flags的函数

获取flags(访问权限)

int flags=fcntl(int fd,F_GETFL);

修改flags

fcntl(int fd,F_SETFL,flags)
失败返回-1并且设置errno值
#include<stdio.h>
#include<string.h>                                                              
#include<unistd.h>
#include<pthread.h>
#include<fcntl.h>
#include<sys/stat.h>
int main(int argc, char* argv[]){
	int fd=open("a.txt",O_RDONLY | O_CREAT |O_NONBLOCK,0644);
	int flags=fcntl(fd,F_GETFL);
	//保留末2位,因为只读只写 可读可写 没有超过3的数据所以都用&3保留后俩位
	if((flags & O_ACCMODE) == O_RDONLY){
		printf("文件可读\n");
	}
	return 0;
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

dup函数

复制文件描述符,返回新的文件描述符,使新的fd和旧的fd指向同一打开的文件
int new_fd=dup(old_fd);

用open打开同一文件两次,fd1和fd2指向的是不同的打开文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

fd2覆盖了fd1的内容,因为fd维护文件偏移量,fd指向不同文件写入不会改变文件偏移量

但是用dup函数复制文件描述符,复制的fd和原fd指向同一打开文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

dup2函数

int new_fd2=dup2(old_fd,new_fd1);
关闭fd1文件,使fd1指向old_fd

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

perror函数

打印errno值相对应的报错信息
perror(const char *s)
在输出报错信息前加一些额外的信息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

strerror函数

将错误码转换为相应信息的错误字符串

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

stat函数

获取文件的属性
头文件:#include <sys/stat.h>
int stat(const char* pathname,struct stat *file_info)传出参数
int lstat(const char* pathname,struct stat *file_info)
int fstat(int fd,struct *file_info)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

综合练习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nvidia V100 GPU 运行 InternVL 1.5-8bit

InternVL 运行 InternVL 1.5-8bit教程 InternVL 官网仓库及教程 1. 设置最小环境 conda create --name internvl python3.10 -y conda activate internvl conda install pytorch2.2.2 torchvision pytorch-cuda11.8 -c pytorch -c nvidia -y pip install transf…

2010年认证杯SPSSPRO杯数学建模D题(第一阶段)服务网点的分布全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 D题 服务网点的分布 原题再现&#xff1a; 服务网点、通讯基站的设置&#xff0c;都存在如何设置较少的站点&#xff0c;获得较大效益的问题。通讯基站的覆盖范围一般是圆形的&#xff0c;而消防、快餐、快递服务则受到道路情况和到达时间的限…

ITIL4之打造高效IT运维的“金三角”

在这个数字化时代&#xff0c;每一秒的停顿都可能意味着巨大的经济损失&#xff0c;因此&#xff0c;高效且可靠的IT运维管理成为了企业稳健前行的基石。我们就以小白友好的方式&#xff0c;深入浅出地探讨ITIL4理论框架下的三个关键实践——容量和性能管理、可用性管理、以及度…

Java代理Ⅱ

目录 静态代理的内存结构图 测试demo 内存图 关于为什么不能直接修改原方法&#xff0c;而是要用代理 参考文章 关于代理我之前写过一篇博客&#xff0c;基本已经讲的差不多了&#xff0c;有兴趣的读者可以去看看 Java代理 最近有了新的感悟&#xff0c;所以记录一下 静…

线路和绕组中的波过程(一)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第一篇笔记。下一篇传送门。 当电路中的设备&#xff08;元件&#xff09;最大实际尺寸l大于人们所感兴趣的谐波波长 λ \lambda λ时&#xff0c;可以作为集中参数处理&#xff0c;否则就要当做分布参数处理。即&…

一键开启,盲盒小程序里的梦幻奇遇

在这个充满惊喜与未知的数字时代&#xff0c;盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启&#xff0c;你就能踏入一个充满梦幻奇遇的世界&#xff0c;探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台&#xff0c;它更是一个充满神秘与惊喜的宝藏库…

数据结构之链表篇

今天我们讲我们数据结构的另一个重要的线性结-----链表&#xff0c; 什么是链表 链表是一种在 物理存储上不连续&#xff0c;但是在逻辑结构上通过指针链接下一个节点的形成一个连续的结构。 他和我们的火车相似&#xff0c;我们的元素是可以类比成车厢&#xff0c;需要将⽕…

web前端学习笔记10

10. CSS3基础 10.1 圆角 CSS3可以设置边框的圆角,其属性是border-radius,可以通过圆角属性制作出各种形状的图形和圆角效果。10.1.1 圆角 border-radius的四个属性值按顺时针排列,对应四个不同的圆角 案例代码 <!DOCTYPE html> <html lang="en"><…

杰发科技AC7801——ADC之Bandgap和内部温度计算

0. 参考 电流模架构Bandgap设计与仿真 bandgap的理解&#xff08;内部带隙电压基准&#xff09; ​ ​ 虽然看不懂这些公式&#xff0c;但是比较重要的一句应该是这个&#xff1a;因为传统带隙基准的输出值为1.2V ​ 1. 使用 参考示例代码。 40002000是falsh控制器寄…

Vue3专栏项目 -- 三、使用vue-router 和 vuex(上)

前面我们开发了两个页面的组件&#xff0c;现在我们需要把它们分成几个页面了&#xff0c;那么一个网页多个页面我们都熟悉&#xff0c;针对不同的url渲染不同的html静态页面&#xff0c;这是web世界的基本工作方式。 有时候我们点击一个东西&#xff0c;地址栏的路由跳转&…

DSP ARM FPGA 实验箱_音频处理_滤波操作教程:3-9 音频信号的滤波实验

一、实验目的 掌握Matlab辅助设计滤波器系数的方法&#xff0c;并实现音频混噪及IIR滤波器滤除&#xff0c;并在LCD上显示音频信号的FFT计算结果。 二、实验原理 音频接口采用的是24.576MHz&#xff08;读兆赫兹&#xff09;晶振&#xff0c;实验板上共有3个音频端口&#x…

JavaScript基础(六)

break & continue continue跳出本次循环&#xff0c;继续下面的循环。 break跳出终止循环。 写个简单的例子: <script> for (var i1; i<5; i){ if (i3){ continue; } console.log(i); } </script> 结果就是跳过i等于3的那次循环&#xff0c;而break: f…

大势所趋!企业网站HTTPS升级全面普及化

JoySSL官网 注册码230918 HTTPS加密协议的应用无疑是维护网络信息安全的重要一环。随着技术的不断进步与用户隐私意识的增强&#xff0c;HTTPS加密已不再仅仅是大型企业的专属&#xff0c;而是逐渐成为所有企业网站的标准配置&#xff0c;其普及化趋势显而易见&#xff0c;堪称…

人工智能|深度学习——PlotNeuralNet简单教程

一、简介 PlotNeuralNet是一个强大的开源Python库,它专为简化和美化神经网络图的绘制而设计 二、安装 需要下载的工具包括&#xff1a;MikTeX&#xff0c;Python代码编辑器&#xff08;这个肯定会有的吧&#xff09;&#xff0c;Git bash&#xff08;可选&#xff09;&#xff…

惠海 H6391 升压恒压芯片IC 2.6-5V升12V/18V方案 内置MOS 高效率 低功耗

升压恒压芯片IC的工作原理主要基于电感和电容的存储能量特性&#xff0c;以及脉宽调制&#xff08;PWM&#xff09;技术。在升压过程中&#xff0c;芯片内部包含了如输入滤波电容、续流二极管、升压电感、开关管、输出滤波电容等部分。当开关管处于导通状态时&#xff0c;电感中…

牛客小白月赛93

B交换数字 题目&#xff1a; 思路&#xff1a;我们可以知道&#xff0c;a*b% mod (a%mod) * (b%mod) 代码&#xff1a; void solve(){int n;cin >> n;string a, b;cin >> a >> b;for(int i 0;i < n;i )if(a[i] > b[i])swap(a[i], b[i]);int num1…

[Algorithm][递归][斐波那契数列模型][第N个泰波那契数][三步问题][使用最小花费爬楼][解码方法]详细讲解

目录 1.第 N 个泰波那契数1.题目链接2.算法原理详解3.代码实现 2.三步问题1.题目链接2.算法原理详解3.代码实现 3.使用最小花费爬楼梯1.题目链接2.算法原理详解3.代码实现 4.解码方法1.题目链接2.算法原理详解3.代码实现 1.第 N 个泰波那契数 1.题目链接 第 N 个泰波那契数 2…

mysql中sql语句 exists 判断子句的用法

如果子查询成立才执行父查询 exists判断子查询的使用例子&#xff1a; 张三不存在所以前面的父查询不执行 后面的子句结果存在&#xff0c;所以前面的父查询被执行 where条件所连接的嵌套子查询都是&#xff0c;条件子查询 ———————————————————————…

SSM【Spring SpringMVC Mybatis】——Mybatis(二)

如果对一些基础理论感兴趣可以看这一期&#x1f447; SSM【Spring SpringMVC Mybatis】——Mybatis 目录 1、Mybatis中参数传递问题 1.1 单个普通参数 1.2 多个普通参数 1.3 命名参数 1.4 POJO参数 1.5 Map参数 1.6 Collection|List|Array等参数 2、Mybatis参数传递【#与…

数据结构与算法学习笔记八-二叉树的顺序存储表示法和实现(C语言)

目录 前言 1.数组和结构体相关的一些知识 1.数组 2.结构体数组 3.递归遍历数组 2.二叉树的顺序存储表示法和实现 1.定义 2.初始化 3.先序遍历二叉树 4.中序遍历二叉树 5.后序遍历二叉树 6.完整代码 前言 二叉树的非递归的表示和实现。 1.数组和结构体相关的一些知…