IO进程线程(三)文件IO之open/close read/write lseek

一、文件IO

(一)概念

文件IO就是系统调用,用户空间进入内核空间的过程就是系统调用。
系统调用没有缓冲机制,效率较低,可移植性也相对较差,实时性高。

文件描述符是使用open函数打开文件时的返回值,一般叫做fd,这个fd就代表这个打开的文件,
以后对文件的读写操作,就是通过这个文件描述符fd来完成的。
fd是一个整数,在一个程序中文件描述符的范围0-1023共计1024个,
使用uilmit -a 可以查看一个程序中可以打开的文件的个数限制
(open files 后面对应的就是 这个值也可以使用命令 ulimit -n 2048来修改 但一般都是用默认值)
在一个程序启动的过程中,默认就会打开三个描述符(0 1 2),
如果再打开新文件,一般是从3开始的

文件描述符 功能
0 标准输入
1 标准输出
2 标准出错

(二)open和close 函数的使用

1. open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);
功能:使用文件IO的方式打开一个文件
参数:pathname:文件的路径和名字flags:O_RDONLY  只读的方式打开文件O_WRONLY   只写的方式打开文件O_RDWR    读写的方式打开文件----上面三个必须三选一  下面的是附加选项----O_APPEND  以追加的方式打开文件O_CREAT  如果文件不存在,则新建这个文件如果指定了这个宏,则第三个参数 mode 必须填mode代表的是创建文件的权限创建普通文件的最大权限为 0666也就是说我们给mode赋值 最大应该就为 0666但是实际上创建文件的权限还得涉及 掩码 umaskumask的值 默认为 0002  这个值也可以改的最终的权限 = (mode & ~umask)所以 即使给的是 0666 最终的权限也是 0664O_EXCL 需要和 O_CREAT 一起使用 如果文件不存在会创建文件如果文件存在,会报错 错误码:EEXISTO_TRUNC :如果文件存在就清空mode:代表文件的权限 一般用8进制表示
返回值:成功  文件描述符(返回的文件描述符遵循未被打开的最小原则)失败  -1 重置错误码

flags操作的原理

标准io文件io说明
rO_RDONLY以只读的方式打开文件
r+O_RDWR以读写的方式打开文件
wO_WRONLY|O_CREAT|O_TRUNC, 0666以只写的方式打开文件文件存在就清空不存在就新建
w+O_RDWRO_CREAT

2. close 函数的使用

#include <unistd.h>
int close(int fd);
功能:关闭文件
参数:fd:文件描述符
返回值:成功 0失败 -1 重置错误码

(三)read/write函数

1. read

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从文件fd中读取最多count个字节到buf中
参数:fd:文件描述符buf:用来存放读到的内容的缓冲区的首地址count:想要读取的字节数
返回值:成功  实际读到的字节数(读到文件结束会返回0)失败  -1  重置错误码

2. write

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
功能:把buf指向的内容写最多count个到文件fd中
参数:fd:文件描述符buf:要写入的内容的首地址count:想要写入的字节数
返回值:成功  实际写入的字节数失败  -1  重置错误码

(四)光标操作

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
功能:设置光标位置
参数:fd:文件描述符offset:偏移量0  不偏移>0  向后偏移<0  向前偏移whence:相对位置SEEK_SET  相对于文件开头SEEK_CUR  相对于当前位置SEEK_END  相对于文件结尾
返回值:成功  光标新位置距离文件开头的偏移量失败  -1  重置错误码使用实例:lseek(fd, 0, SEEK_SET);//将光标定位到文件开头lseek(fd, 0, SEEK_END);//将光标定位到文件结尾lseek(fd, 10, SEEK_CUR);//将光标向后偏移10个字节lseek(fd, -10, SEEK_CUR);//将光标向前偏移10个字节lseek(fd, 10, SEEK_SET);//将光标定位到文件开头第10个字节lseek(fd, -10, SEEK_END);//将光标定位到文件倒数第10个字节

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

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

相关文章

NIUSHOP开源商城单商户V6版本:前端技术架构的深度解析

摘要&#xff1a; 本文将对NIUSHOP开源商城单商户V6版本的前端技术架构进行深度解析。NIUSHOP V6版本以其强大的多应用多插件组合设计理念、前后端完全分离的技术架构&#xff0c;以及支持多语言、多平台等特点&#xff0c;受到了市场的广泛好评。本文将详细介绍其前端技术栈的…

HOW - BFF 服务实践系列(一)

目录 一、BFF 介绍1.1 BFF 的概念1.2 为什么需要 BFF1.3 举例说明 二、适用于Web前端的BFF应该提供哪些能力2.1 接口聚合&#xff08;重要&#xff09;2.2 简化和优化的API2.3 安全和身份验证&#xff08;重要&#xff09;2.4 缓存机制2.5 错误处理和重试机制2.6 数据格式转换2…

【算法】贪心算法简介

贪心算法概述 目录 1.贪心算法概念2.贪心算法特点3.贪心算法学习 1.贪心算法概念 贪心算法是一种 “思想” &#xff0c;即解决问题时从 “局部最优” 从而达到 “全局最优” 的效果。 ①把解决问题的过程分为若干步②解决每一步时候&#xff0c;都选择当前最优解(不关注全局…

RDD实战:排序算子 - sortBy()

在本实战案例中&#xff0c;我们将使用Apache Spark的sortBy()算子来对一个包含学生信息的RDD进行排序操作。 排序规则如下&#xff1a; 首先按照性别升序排列。在性别相同的情况下&#xff0c;按照年龄降序排列。 步骤1&#xff1a;创建学生信息列表 首先&#xff0c;我们创…

基于51单片机和NRF24L01的无线温度监控设计

一、设计功能 由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。 温度显示精确到小数点后一位。 按键设定过温值&#xff0c;过温在液晶屏提示。 系统设计 三、器件选择3.1温度信号采集模块 传统的温度检测大多以热敏电阻为传感器&a…

【C++】list的使用(上)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f308;关于list&#x1f525;默认成员函数构造函数&#xff08;constructor&#xff09;析构函数&#xff08;destructor&#xff09;赋值运算符重载 &#x1…

从技术底层超主层依次介绍大模型

目录 # 如何让大模型更聪明&#xff1f; 一、GPT大模型基本概念 二、大模型生态介绍 三、简单描述如何让大模型变得更加聪明 # 如何让大模型更聪明&#xff1f; 一、GPT大模型基本概念 前景&#xff1a; 40年一遇的技术变革&#xff1b;被优化的人口&#xff0c;在未来十…

五分钟“手撕”栈

实现代码放开头&#xff0c;供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…

Request

一、Request介绍 在计算机网络中&#xff0c;"Request"&#xff08;请求&#xff09;通常指的是客户端向服务器发送的请求消息&#xff0c;用于获取特定资源或执行特定操作。在Web开发中&#xff0c;"Request"通常指的是HTTP请求&#xff0c;用于客户端与服…

速盾:香港服务器可以用cdn吗?

香港是一个互联网发达的地区&#xff0c;拥有优质的网络基础设施和大量的服务器机房。对于网站和应用开发者来说&#xff0c;选择一个合适的服务器位置是十分重要的。CDN&#xff08;内容分发网络&#xff09;是一种能够通过分布在全球各地的服务器节点来加速访问速度的技术&am…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈&#xff08;堆栈&#xff09;&#xff1a;存放非静态局部变量/函数参数/函数返回值等等&#xff0c;栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆&#xff1a;用于程序运行时动态内存分配&#xff…

电脑丢失api-ms-win-crt-runtime-l1-1-0.dll的多种修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中&#xff0c;它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&#xf…

前端面试题:var const let的区别

1 作用域 var声明的变量具有函数级作用域&#xff0c;这意味着它们在全局作用域或函数内部都有效&#xff0c;且可以被全局访问。 let和const声明的变量具有块级作用域&#xff0c;这意味着它们只在声明它们的代码块内有效&#xff0c;不能跨块或跨函数访问。 2 变量提升 va…

大型企业用什么文件加密软件,五款适合企业的文件加密软件

大型企业在选择文件加密软件时&#xff0c;通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件&#xff1a; 1.域智盾软件&#xff1a; 作为一款企业级文件加密软件&#xff0c;支持…

曲面细分技术在AI去衣中的创新应用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域的应用日益广泛。其中&#xff0c;AI去衣技术因其独特的应用场景而备受瞩目。在这一技术的发展过程中&#xff0c;曲面细分技术发挥了至关重要的作用。本文将深入探讨曲面细分技术在AI去衣中的作用及其…

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别&#xff1a; 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时&#xff0c;程序运行异常&#xff1a; u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…

vue3可以快速简单的操作dom元素了

再也不需要用document.getElementById("myElement")的这种方式来对dom元素进行操作了 我们需要使用模板引用——也就是指向模板中一个 DOM 元素的 ref。我们需要通过这个特殊的 ref attribute 来实现模板引用&#xff1a; <script setup> import { ref, onMo…

wafw00f一键检测目标防火墙信息(KALI工具系列十五)

目录 1、KALI LINUX简介 2、wafw00f工具简介 3、在KALI中使用lbd 3.1 查看可检测的防火墙对象 3.2 目标防火墙种类检测 3.3 目标防火墙详细信息检测 3.4 将检查结果输出 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&#xff0c;广…

最好的电脑数据恢复软件是什么

由于硬件故障、恶意软件攻击或意外删除而丢失文件可能会造成巨大压力。数据丢失会扰乱日常运营&#xff0c;造成宝贵的业务时间和资源损失。在这些情况下&#xff0c;数据恢复软件是检索丢失或损坏数据的最简单方法。 数据恢复软件何时起作用&#xff1f; 对于 Windows 数据恢…