IO进程线程(二)文件IO(系统调用)

一、文件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/pingmian/19992.shtml

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

相关文章

【运维项目经历|023】Docker自动化部署与监控项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题 问题1&#xff1a;项目周期是多久&#xff1f; 问题2&#xff1a;服务器部署架构方式及数量配置…

【Nacos源码分析01-服务注册与集群间数据是同步】

文章目录 了解CAPBASE理论Nacos支持CP还是AP集群数据同步实现集群数据一致性源码 了解CAP CAP理论的核心观点是&#xff0c;一个分布式系统无法同时完全满足一致性、可用性和分区容错性这三个特性。具体而言&#xff0c;当发生网络分区时&#xff0c;系统必须在一致性和可用性之…

计算机视觉与模式识别实验1-2 图像的形态学操作

文章目录 &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1;1.图像膨胀2.图像腐蚀3.膨胀与腐蚀的综合使用4.对下面二值图像的目标提取骨架&#xff0c;并分析骨架结构。 &#x1f9e1;&#x1f9e1;全部代码&#x1f9e1;&#x1f9e1; &#x1f9e1;&#x1f9e1…

洛谷 B3642:二叉树的遍历 ← 结构体方法 链式前向星方法

【题目来源】https://www.luogu.com.cn/problem/B3642【题目描述】 有一个 n(n≤10^6) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过 n&#xff09;&#xff0c;建立一棵二叉树&#xff08;根结点的编号为 1&#xff09;&#xff0c;如果是叶子结点&…

tomcat中管理环境变量之setenv.sh

tomcat配置spring profiles springboot打包war部署到外部tomcat的时候指定profile启动 windows 在%tomcat%/bin下创建setenv.bat文件 linux 在%tomcat%/bin下创建setenv.sh文件 使用JVM参数: windows set "JAVA_OPTS%JAVA_OPTS% -Dspring.profiles.activedev"in…

Python学习笔记-JSON数据格式的转化

1.json的格式 json本质上是一个特定格式的字符串 #json数据的格式可以是&#xff1a; {"name":"admin","age":18}#也可以是&#xff1a; [{"name":"admin","age":18},{"name":"root","…

科技云报道:大模型风起云涌,向量数据库终有“用武之地”?

科技云报道原创。 每逢淘金热&#xff0c;最后的赢家都是卖铲人&#xff0c;而非淘金者。在近两年的大模型风口下&#xff0c;向量数据库就成了这把铲子。 随着大模型快速发展&#xff0c;向量数据库正在成为企业便捷使用大模型、最大化发挥数据价值的关键工具。据IDC调查数据…

Python自动化办公2.0 即将发布

第一节课&#xff1a;数据整理与清洗 第二节课&#xff1a;数据筛选、过滤与排序 第三节课&#xff1a;高级数据处理技巧 第四节课&#xff1a;数据可视化与实践案例 第五节课&#xff1a;统计分析与报表 第六节&#xff1a;常见的Excel报表 与下方的课程形成知识体系&…

vue3学习(六)

前言 接上一篇学习笔记&#xff0c;今天主要是抽空学习了vue的状态管理&#xff0c;这里学习的是vuex&#xff0c;版本4.1。学习还没有学习完&#xff0c;里面有大坑&#xff0c;难怪现在官网出的状态管理用Pinia。 一、vuex状态管理知识点 上面的方式没有写全&#xff0c;还有…

如何在Windows 10上更改默认系统字体,这里有详细步骤

Windows 10的默认系统字体Segoe UI看起来相当不错。但是,如果你有更好的替代品,你可以更改Windows 10 PC上的默认系统字体。我们将向你展示如何执行此操作。 如何使用注册表编辑器更改默认系统字体 在撰写本文时,“设置”和“控制面板”都没有更改默认系统字体的选项。这意…

官网:管它日薄西山or蒸蒸日上,气质这块,必须拿捏死死的。

在日薄西山的时候&#xff0c;网站建设面临着许多困难和挑战。市场竞争激烈&#xff0c;用户需求多样化&#xff0c;技术更新迅速&#xff0c;这些都要求我们在网站建设中拥有高尚的气质。 而在蒸蒸日上的时刻&#xff0c;网站建设同样需要我们拿捏好气质。只有坚持下去&#…

MFC实现守护进程,包括开机自启动、进程单例、进程查询、进程等待、重启进程、关闭进程

在Windows平台上实现一个守护进程&#xff0c;由于与系统有关&#xff0c;所有使用MFC来实现是最合适的&#xff0c;被守护的进程则不限语言。废话不多&#xff0c;直接开整。 目录 1. 开机自启动 2. 进程单例 3. 进程查询 4. 进程等待 5. 重启进程 6. 关闭进程 7、最后…

软件和系统集成项目确认测试报告的费用需要多少?

确认测试报告 软件和系统集成项目确认测试报告的费用因多种因素而异&#xff0c;包括项目的规模、复杂度、测试范围、测试周期等。第三方软件测试机构价格区间一般是几千到几万不等&#xff0c;还有些会根据建设费用的2-5%进行收费。 一般来说&#xff0c;软件和系统集成项目…

如何使用JavaScript获取当前URL?

在现代开发中,我们经常需要获取当前网页的URL来完成各种操作,例如页面重定向、参数解析等。在URL的处理上,JavaScript提供了一系列强大且便捷的工具。这篇文章将详细讲解如何使用JavaScript获取当前页面的URL,并分解URL的各个组成部分。 使用JavaScript获取完整的URL 获取…

element ui el-calendar日历组件完整代码

el-calendar日历组件完整代码 1. 说在前面2. 日历整体代码3. 编辑与新增 1. 说在前面 最近一直忙于上班&#xff0c;没咋看博客&#xff0c;发现很多小伙伴都要日历组件的代码&#xff0c;于是今天抽空给大家整理一下&#xff0c;为爱发电&#xff01;日历组件的原文在这里&am…

mysql中的IN和NOT IN

在MySQL中&#xff0c;IN 和 NOT IN 是用于进行集合比较的条件运算符。它们可以用于简化多个 OR 或 AND 条件的查询。这些运算符在查询语句中非常常见&#xff0c;用于检查某个值是否在指定的集合中。 IN 运算符用于检查某个值是否在指定的集合中。NOT IN 运算符用于检查某个值…

USB转串口针线 USB四根线

USB转RS485 RXD 和 RXD- 分别代表数据接收的正端和负端。在一对通讯系统中&#xff0c;RXD信号在DTE设备端&#xff08;如计算机、工程主机&#xff09;为输入信号&#xff0c;即数据接收端。其中&#xff0c;RXD代表数据接收的正端&#xff0c;而RXD-代表数据接收的负端。 T…

如何构建最小堆?

方式1&#xff1a;上浮调整 /*** 上浮调整(小的上浮)*/ public static void smallUp1(int[] arr, int child) {int parent (child - 1) / 2;while (0 < child && arr[child] < arr[parent]) { // 0 < child说明这个节点还是叶子arr[child] arr[child] ^ ar…

吊车近电报警器:各种高空作业车辆防触电事故设备

吊车近电报警器&#xff1a;各种高空作业车辆防触电事故设备 吊车近电报警器是专门用于防止大型高空作业车&#xff08;如吊车、起重机、消防车等&#xff09;在作业过程中触碰高压线路而引发事故的装置。该装置能够实时监测吊车与高压电线之间的距离&#xff0c;并在危险情况…

静态链表具体题目处理详解

题目 给出两条链表的首地址以及若干结点的地址、数据、下一个结点的地址&#xff0c;求两条链表的首个共用结点的地址。如果两条链表没有共用结点&#xff0c;则输出-1. 思路 &#xff08;1&#xff09;由于地址的范围很小&#xff0c;因此可以直接用静态链表&#xff0c;但…