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)

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

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

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

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

综合练习

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3实现动态表格

vue3结合element-plus实现动态表格&#xff0c;可添加、删除、对单行数据判断。 实现效果&#xff1a;查看源代码 实现代码&#xff1a; <div class"arrTable-Box"><el-table :data"tableData" border max-height"250"><el-t…

思维导图如何用AI生成?借助这几款工具

思维导图如何用AI生成&#xff1f;在数字化时代&#xff0c;思维导图作为一种高效的信息组织与展示工具&#xff0c;被广泛应用于学习、工作和项目管理中。随着人工智能技术的飞速发展&#xff0c;AI生成思维导图已成为现实&#xff0c;极大地提升了创建思维导图的效率和创意。…

2024数维杯A题可运行思路代码文章成品

为了能够精确地确定飞行器在三维空间中的位置&#xff0c;理论上至少需要从三个不同位置的发射源接收TOA数据。下面是使用TOA数据确定位置所需的计算基础和原理&#xff1a; 单个TOA数据&#xff1a; 单个TOA测量可以确定接收器与发射源之间的距离&#xff0c;这在三维空间中形…

合并两个有序链表(C语言)———链表经典算法题

题目描述​​​​​​21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09;&#xff1a; 答案展示: 迭代&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLis…

BBS客户端服务器的编写

根据网络编程中的内容&#xff0c;我们本篇文章将讲解一个bbs通信的项目&#xff0c;首先让我们了解一下什么是bbs. 一、bbs介绍 BBS&#xff0c;即Bulletin Board System的缩写&#xff0c;中文译为“电子公告板系统”或“网络论坛”。它是一个在网络上进行信息交流和讨论的…

STM32MP157_程序烧录

STM32MP157_程序烧录 说明&#xff1a; 1、使用emmc作为存储媒介&#xff0c;emmc是核心板上的存储颗粒空间有8GB 2、SD卡作为存储媒介&#xff0c;底板上有SD卡的插槽 emmc方式 软件&#xff1a;烧录软件使用STM32CubeProgrammer 连接线&#xff1a;硬件连接线使用type_c数据线…

RTSP/Onvif安防监控系统EasyNVR级联视频上云系统EasyNVS报错“Login error”的原因排查与解决

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力&#xff0c;能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、W…

jenkins使用gitLab(极狐)认证登陆

jenkins安装 GitLab Authentication插件 我因为java版本和最新GitLab Authentication 1.19版本不兼容&#xff0c;选择了本地安装 找个历史版本1.13版本&#xff0c;然后下载到电脑上 - 本地上传插件并安装 在极狐上创建一个应用 - 配置应用信息 应用名&#xff1a;jenkinsLo…

2024年最新方法下载钉钉群直播回放

链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好所有的压缩包&#xff0c;这个压缩包里面还套着一共逍遥一仙下载器压缩包&#xff0c;也解压 2.进入逍遥一仙下载器文件夹&#xff0c;打开M3U8 V1.4.8 0508.e…

找不到msvcp140.dll无法执行代码的原因分析及修复方法

当用户在尝试运行某些应用程序或游戏时&#xff0c;可能会遇到系统弹出错误提示&#xff0c;显示“找不到msvcp140.dll无法执行代码”这一错误信息&#xff0c;它会导致程序无法正常启动。为了解决这个问题&#xff0c;我经过多次尝试和总结&#xff0c;找到了以下五种解决方法…

宏集Panorama SCADA软件获BACnet BTL认证

Panorama 获得BACnet BTL认证 建筑物的组件&#xff08;空调系统、照明传感器等&#xff09;能否使用共同通讯协议&#xff1f;这正是标准化 BACnet协议&#xff08;Building Automation and Control Networks&#xff09;所提供的功能。该协议旨在实现建筑物中各种设备和系统…

初探 JUC 并发编程:读写锁 ReentrantReadWriteLock 原理(8000 字源码详解)

本文中会涉及到一些前面 ReentrantLock 中学到的内容&#xff0c;先去阅读一下我关于独占锁 ReentrantLock 的源码解析阅读起来会更加清晰。 初探 JUC 并发编程&#xff1a;独占锁 ReentrantLock 底层源码解析 6.4&#xff09;读写锁 ReentrantReadWriteLock 原理 前面提到的 R…

谈基于ATTCK框架的攻击链溯源

引言 网络安全在当今数字化时代变得尤为关键&#xff0c;而MITRE公司开发的ATT&CK框架则成为了安全专业人员的重要工具。ATT&CK是一种广泛使用的攻击行为分类和描述框架。其目的在于提供一个共同的语言&#xff0c;使安全专业人员能够更好地理解攻击者的行为和目标&…

整理好了!咸阳市各区县高新技术企业申报奖补标准,高企认定时间流程及申报条件

咸阳市及各区县高企申报奖励 咸阳市&#xff1a;对首次通过认定的高新技术企业给予20万元的奖励&#xff0c;通过复审的企业给予5万元奖励。政策依据&#xff1a;咸阳市人民政府办公室关于印发《咸阳市科技型企业三年倍增计划实施方案&#xff08;2022—2024年&#xff09;》的…

如何在您的WordPress网站上安装和设置W3 Total Cache

本周有一个客户&#xff0c;购买Hostease的虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何在您的WordPress网站上安装和设置W3 Total Cache&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff…

【2022 深圳 ArchSummit 】大数据架构稳定性保障实践

文章目录 一、前言二、现状三、大数据架构的历史变迁&#xff08;一&#xff09;洪荒期&MR&#xff08;二&#xff09;远古期&MPP&#xff08;四&#xff09;近现代&Flink/Spark&#xff08;五&#xff09;现如今&实时数据湖架构 四、架构稳定的关键因素&#…

学习100个Unity Shader (17) --- 深度纹理

文章目录 效果shader部分C# 部分理解参考 效果 shader部分 Shader "Example/DepthTexture" {SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _CameraDepthTexture;struct a2v{float4 pos : POSITIO…

公司活动想找媒体报道宣传怎样联系媒体?

作为公司宣传负责人,我深知媒体报道对于企业活动宣传的重要性。然而,在过去,每当有重要活动需要媒体曝光时,我总会被繁琐的媒体联系工作所困扰。 那时,我需要一家家地查询媒体联系方式,发送邮件、打电话,甚至亲自前往媒体机构进行沟通。然而,这样的过程不仅费时费力,而且效率低…

Linux系统调用过程详解:应用程序调用驱动过程

Linux下应用程序调用驱动程序过程&#xff1a; &#xff08;1&#xff09;加载一个驱动模块(.ko)&#xff0c;产生一个设备文件&#xff0c;有唯一对应的inode结构体 a、每个设备文件都有一个对应的’inode‘结构体&#xff0c;包含了设备的主次设备号&#xff0c;是设备的唯一…

ChatGLM3-6B部署与微调及微调后使用

记录ChatGLM3-6B部署及官方Lora微调示例详细步骤及如何使用微调后的模型进行推理 一、下载代码 使用git clone 命令下载源码 git clone https://github.com/THUDM/ChatGLM3.git 如图所示 二、下载模型 模型权重文件从魔塔进行下载&#xff0c;不需要翻墙。权重文件比较大&…