02.文件IO

文件描述符

表述打开的文件的

它是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://xiahunao.cn/news/3029446.html

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

相关文章

YOLOv5独家原创改进: 通用倒瓶颈(UIB)搜索块结合C3二次创新 | 轻量化之王MobileNetV4

💡💡💡创新点:轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞! 最主要创新:引入了通用倒瓶颈(UIB)搜索块,这是一个统一且灵活的结构,它融合了倒瓶颈(IB)、ConvNext、前馈网络(FFN)以及一种新颖的额外深度可分(ExtraDW)变体技…

C++|二叉搜索树

一、二叉搜索树的概念 二叉搜索树又称为二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根结…

每天五分钟深度学习:数学中的极值

本文重点 在数学领域中,极值是一个极其重要的概念,它不仅在纯数学理论研究中占据核心地位,而且在工程、物理、经济等实际应用领域也发挥着不可替代的作用。极值问题涉及函数的最大值和最小值,是微积分学中的一个基本问题。本文旨在详细介绍数学中的极值概念、性质、求解方…

嫁接打印的技术要点

所谓嫁接打印&#xff0c;是一种增减材混合制造的方式。它将已成形的模具零件当作基座&#xff0c;在此基础上“生长”出打印的零件。其中基座通常采用传统加工方式制造&#xff0c;而打印部分则使用专用的金属粉末&#xff0c;通过 3D 打印技术成型。 嫁接打印之所以备受欢迎&…

Golang面向对象编程(一)

文章目录 结构体基本介绍结构体定义方式创建结构体变量结构体内存对齐结构体类型转换字段的Tag标签 方法基本介绍方法的定义和调用方法调用的传参机制String方法 结构体 基本介绍 基本介绍 Go支持面向对象编程特性&#xff0c;包括封装、继承和多态&#xff0c;但Go中没有类&a…

Certbot免费证书的安装,使用,自动续期

首先你得先确认你得linux是那个操作系统&#xff0c;可以用这几个命令试一下。两个都可以试试 cat /etc/os-releaseuname -a然后看是Certbot得安装&#xff1a; CentOS: yum update yum install certbot -y Debian&#xff1a; apt update apt install certbot -y 有的云…

速卖通ip地址会相互影响吗?如何防止账号关联?

在跨境电商行业&#xff0c;大部分平台都是不允许一个卖家操作多个店铺的&#xff0c;如果被平台检测出账户关联&#xff0c;可能会被封店。在速卖通平台&#xff0c;会通过IP地址来判断是否经营多个账号吗?IP地址会使店铺相互影响吗? 一、速卖通IP地址会关联吗? 首先各位卖…

利用智谱清言使用python编写代码获取简单ecupl网站信息

首先提问&#xff1a; 使用python搜取https://xxgk.ecupl.edu.cn/2024/0509/c1334a213900/page.htm的内容 得到代码如下&#xff0c;能直接使用&#xff1a; import requests from bs4 import BeautifulSoup# 目标网页URL url https://xxgk.ecupl.edu.cn/2024/0509/c1334a21…

SpringBoot 实现 RAS+AES 自动接口解密

接口安全老生常谈了 目前常用的加密方式就对称性加密和非对称性加密&#xff0c;加密解密的操作的肯定是大家知道的&#xff0c;最重要的使用什么加密解密方式&#xff0c;制定什么样的加密策略&#xff1b;考虑到我技术水平和接口的速度&#xff0c;采用的是RAS非对称加密和AE…

Linux增加硬盘分区并挂载(各个云平台操作)

第一部分&#xff0c;增加硬盘 1.购买硬盘并选择云服务器 输入lsblk 命令后即可看到刚刚添加的硬盘了 vdb就是新添加的硬盘名称了 第二部分 对硬盘进行分区处理 然后对新建磁盘进行分区 输入命令fdisk /dev/vdb 输入lsblk -f 命令查看刚刚建好的分区(看到多余的sdc不用在意…

解决mybatis的配置文件没代码提示的问题

1.将org.apache.ibatis.builder.xml包里的两个dtd文件复制出来&#xff0c;jar包里复制 2.复制dtd的url地址&#xff1a; http://mybatis.org/dtd/mybatis-3-mapper.dtd 一样的做法&#xff01; 3.关闭两个配置文件&#xff0c;重新打开&#xff0c;就可以有代码提示了&…

Vue3:项目创建

Vue 3 相对于 Vue 2 带来了许多改进和优点&#xff0c;这些改进主要是为了提高性能、开发体验和可维护性。但是对于创建项目&#xff0c;Vue3也可以采用跟Vue2相同的方式。 使用CLI创建 1. 安装Vue CLI 首先&#xff0c;确保你已经安装了Node.js&#xff08;建议使用LTS版本…

Python学习笔记------json

json简介 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互 为了让不同的语言能够相互通…

[C++核心编程-06]----C++类和对象之对象模型和this指针

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Day 43 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

最后一块石头重量Ⅱ 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两…

drawio 网页版二次开发(2):开始修改代码

目录 一 说明 二 打开开发环境 1. 代码调整 2. 修改访问链接 3. 注意 三 部分功能的代码汇总 1. 保存功能 2. 菜单栏折叠按钮功能 3. 顶部菜单栏 4.在顶部菜单栏中的【文件】菜单中新增选项 &#xff08;1&#xff09; 方法一&#xff1a;单独增加 &#xff08;…

中北大学软件学院javaweb实验二JSP应用开发实验报告

实验时间 2024年4月 25 日17时至 22 时 学时数 4 1.实验名称 实验2&#xff1a;JSP应用开发(2学时) 2.实验目的 &#xff08;1&#xff09;学会编写和运行简单的JSP页面&#xff0c;理解其运行原理&#xff1b; &#xff08;2&#xff09;学会使用JSP的声明、表达式、脚…

Python数据科学 | ​Python 离群点检测算法 -- GMM

本文来源公众号“Python数据科学”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;​Python 离群点检测算法 -- GMM 星星在天空中聚集或分散&#xff0c;呈现出自然的分布。在统计学中&#xff0c;K-均值法是一种著名的聚类技术&a…

Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)

1 漏洞描述 CVE-2020-1938 是 Apache Tomcat 中的一个严重安全漏洞&#xff0c;该漏洞涉及到 Tomcat 的 AJP&#xff08;Apache JServ Protocol&#xff09;连接器。由于 AJP 协议在处理请求时存在缺陷&#xff0c;攻击者可以利用此漏洞读取服务器上的任意文件&#xff0c;甚至…

keil5软件安装教程(MDKv5.39)

keil5软件安装分为三部分&#xff1a; 目录 1.安装mdk 2.激活mdk 3.安装STM32芯片包 1.安装mdk 安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1PZoGhzI5Y19ROv7xe9QJKA?pwdgt3s 提取码&#xff1a;gt3s 1、下载keil5的压缩包并解压&#xff0c;鼠…