Linux中文件IO(open、read、write、close函数使用)

news2024/12/23 7:04:33

介绍

  • 什么是文件IO?
    是操作系统提供的API接口函数。
    POSIX接口 (了解)
    注意:文件IO不提供缓冲机制
    文件IO的API
    open close read read
    文件描述符概念:
    英文:缩写fd(file descriptor)
    是0-1023的数字,表示文件。
    0, 1, 2 的含义 标准输入,标准输出,错误
  • 文件IO和标准IO的函数类型
    在这里插入图片描述

文件IO打开使用

  • 函数如下:
    open
    int open(const char *pathname, int flags); 不创建文件
    int open(const char *pathname, int flags, mode_t mode); 创建文件,不能创建设备文件
    成功时返回文件描述符;出错时返回EOF
  • flags的用法如下:
    文件IO和标准的模式对应关系:
    r O_RDONLY
    r+ O_RDWR
    w O_WRONLY | O_CREAT | O_TRUNC, 0664(普通用户权限)
    w+ O_RDWR | O_CREAT | O_TRUNC, 0664
    a O_WRONLY | O_CREAT | O_APPEND, 0664
    a+ O_RDWR | O_CREAT | O_APPEND, 0664
    umask概念:
    umask 用来设定文件或目录的初始权限
    注:这个0664实际是等于创建的权限-linux默认的初始权限
  • 代码如下:
    在这里插入图片描述
  • 运行如下:
    在这里插入图片描述
    注:可以看到多出一个test.txt文件

关闭文件

  • 函数如下:
    int close(int fd)
    关闭后文件描述符不能代表文件
    文件IO的读写和定位
    容易出错点:
    求字符串长度使用sizeof,对二进制数据使用strlen
    printf 的字符最后没有’\0’
  • 案例代码如下:
    在这里插入图片描述
  • 执行如下:
    在这里插入图片描述

文件IO-read、write

  • read函数如下:
    ssize_t read(int fd,void *buf,size_t count)//读文件数据的
    注:成功时返回实际读取的字节数;出错时返回EOF
    读取到文件末尾返回0
    buf是接受数据的缓冲区
    count不应超过buf‘大小,count是想读多少,
  • write函数如下:
    write函数用来向文件写入数据
    ssize_t write(int fd,void *buf,size_t count);//count时写多少数据的大小,自己定义
    注:成功时返回实际写入的字节数;出错时返回EOF
    buf是发送数据的缓冲区
    count不应超过过buf大小
  • 代码如下:
    在这里插入图片描述
    注:write函数那一行,ret返回的是第三个参数的值,strlen(buf)也就是实际值,如果是sizeof(buf)的话返回的就是30个不是实际值了,但二进制数据的话就不能用strlen,因为二进制里面有很多/0,而strlen就是以/0标志为结束标志的。还有就是第二个close(fd)加上是因为,read读数据的话是接着上面的写函数的流指针,如果不加入close的话,指针位置在文件末尾,往后读就为空,加上之后再加入打开文件,指针自动移动到文件首处,然后可以正常显示数据了
  • 执行如下:
    在这里插入图片描述

文件IO的定位

  • 函数如下:
    off_t lseek(int fd,off_t offset,intt whence)
    注:成功时返回当前的文件读写位置;出错时返回EOF
    参数offset和参数whence同fseek完全一样
  • 代码如下:
    在这里插入图片描述
    注:将close函数和open函数替换成上述代码即可达到一样的效果

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

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

相关文章

前端和后端之间的CORS 跨域和解决办法

什么是CORS(Cross-Origin Resource Sharing,跨源资源共享) 跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源&#xff0…

go 语言中 json.Unmarshal([]byte(jsonbuff), j) 字节切片得使用场景

struct_tag的使用 在上面的例子看到,我们根据结构体生成的json的key都是大写的,因为结构体名字在go语言中不大写的话,又没有访问权限,这种问题会影响到我们对json的key的名字,所以go官方给出了struct_tag的方法去修改…

【C++杂货铺】三分钟彻底搞懂如何使用C++中max函数

🌈前言 欢迎收看本期【C杂货铺】,这期内容,我们将围绕C中max函数部分进行讲解,包含了如何查询库函数,max函数的使用方法灯。如果你想学习C,或者刚学完C语言衔接C,那么这篇文章将会非常有效的帮助…

Redis学习——入门篇①

Redis学习——入门篇① 1、2:Redis入门概述3:Redis安装配置10 安装Redis-cli命令 4:Redis——十大数据类型11 redis数据类型12 命令查阅13 key常用命令介绍14 类型大小写和帮助命令15 String 命令(上)16 String 命令&a…

电脑摄像头设置在哪里?这3种打开方式要记好!

“我需要开一个视频会议,因此可能需要用到电脑的摄像头。但是我不知道我电脑的摄像头设置在哪里,有没有朋友可以告诉我一下呀?” 在日常办公时,我们可能经常要用到电脑摄像头。这不仅为用户提供了实时沟通的机会,还帮助…

机器学习实验报告——APRIORI算法

目录 一、算法介绍 1.1算法背景 1.2算法引入 1.3算法假设 1.4算法基本概念介绍 1.4.1关联规则 1.4.2支持度 1.4.3置信度 1.4.4频繁项集 1.4.5项目 1.4.6提升度 二、算法原理 2.1算法思想 2.2Apriori算法产生频繁项集 2.3Apriori算法的基本步骤 2.4关联分析 三、算法实现 3.1 Ap…

安卓自动化 | autox.js

介绍: 不需要Root权限 的 JavaScript 自动化软件 官方文档: http://doc.autoxjs.com/ 开发准备 安装Releases kkevsekk1/AutoX (github.com)到手机上 安装vscode插件 插件介绍中有中文的使用说明, 如何连接电脑 Usage Step 1 按 CtrlShiftP 或点击"查看"->&…

司铭宇老师:房地产中介培训班:房地产中介培训课程

房地产中介培训班:房地产中介培训课程 在竞争激烈的房地产市场中,成为一名杰出的中介代表不仅需要对行业有深刻的理解,还要具备一系列专业技能和高效的销售策略。我们的房地产中介培训课程旨在为有志于提升个人能力和业绩的中介人员提供全面、…

C++: vector

目录 1.vector的介绍 2.vector常用的接口 1.vector构造 2.迭代器iterator的使用 3.vector空间增长 4.vector的增删改查 3.vector模拟实现 如果在reverse时使用memcpy会怎么样? 1.vector的介绍 C中的vector是一个动态数组容器,可以存储任意类型的…

element plus表格的表头和内容居中

文章目录 需求分析 需求 对于 element-plus 中的 table 进行表头和内容的居中显示 分析 单列的表头和内容居中 &#xff1a; 在对应的那一列加上align“center” 即可 <el-table-column prop"name" label"商品名称" align"center" />…

Golang 中如何实现 Set

在Go编程中&#xff0c;数据结构的选择对解决问题至关重要。本文将探讨如何在 GO 中实现 set 和 bitset 两种数据结构&#xff0c;以及它们在Go中的应用场景。 Go 的数据结构 Go 内置的数据结构并不多。工作中&#xff0c;我们最常用的两种数据结构分别是 slice 和 map&#…

安防视频监控EasyCVR平台HTTP-FMP4播放协议在分屏播放时的性能优化

安防视频监控EasyCVR平台兼容性强&#xff0c;可支持的接入协议众多&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

String对象的探究(new String到底创建了多少对象?)

String对象的探究 1. 前言&#xff08;String&#xff09;2. new String()到底创建了多少对象&#xff08;java8举例&#xff09;&#xff1f;2.1. new String("abc")&#xff1a;2/12.2. String str “a” "b" “c”&#xff1a;12.3. String abc &quo…

【MySQL源码】Seconds_Behind_Master是如何计算的

作为MySQL DBA&#xff0c;相信大家对参数 Seconds_Behind_Master 并不陌生&#xff0c;该字段的值可以通过 show slave status\G的输出&#xff0c;表示主从延迟的时间&#xff0c;单位为秒。监控主从延迟一般取这个值就足够了。0 表示无延迟&#xff0c;理想状态该值不要超…

JavaWeb之JavaScript-Vue --黑马笔记

什么是JavaScript&#xff1f; JavaScript&#xff08;简称&#xff1a;JS&#xff09; 是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互。 JavaScript 和 Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似。 …

【动态规划】879. 盈利计划

作者推荐 【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径 本文涉及知识点 动态规划汇总 LeetCode879. 盈利计划 集团里有 n 名员工&#xff0c;他们可以完成各种各样的工作创造利润。 第 i 种工作会产生 profit[i] 的利润&#xff0c;它要求 group[…

用flinkcdc debezium来捕获数据库的删除内容

我在用flinkcdc把数据从sqlserver写到doris 正常情况下sqlserver有删除数据&#xff0c;doris是能捕获到并很快同步删除的。 但是我现在情况是doris做为数仓&#xff0c;数据写到ods&#xff0c;ods的数据还会通过flink计算后写入dwd层&#xff0c;所以此时ods的数据是删除了…

java SSM自助快递服务平台myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM自助快递服务平台是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

【设计模式】字节三面:请举例阐释访问者模式

今天我们要一起探讨的主题是一种设计模式——访问者模式(Visitor Pattern)。我将从最基础的概念、应用场景&#xff0c;再到实例代码的展示&#xff0c;全方位的为大家剖析访问者模式。而且&#xff0c;我保证&#xff0c;你即使是编程新手&#xff0c;也能理解并开始应用这个设…

Unity3D控制人物移动的多种方法

系列文章目录 unity知识点 文章目录 系列文章目录前言一、人物移动之键盘移动1-1、代码如下1-2、效果 二、人物移动之跟随鼠标点击移动2-1、代码如下2-2、效果 三、人物移动之刚体移动3-1、代码如下3-2、效果 四、人物移动之第一人称控制器移动4-1、代码如下4-2、效果 五、And…