9.3 Linux_文件I/O_相关函数

news2024/12/23 1:11:09

打开与关闭

1、打开文件

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

返回值:成功返回文件描述符,失败返回EOF

pathname:文件路径

flags:标志,其中O_RDONLY、O_WRONLY、O_RDWR三个互斥,其余可用 ' | ' 链接

标志名含义
O_RDONLY只读方式打开
O_WRONLY只写方式打开
O_RDWR可读可写方式打开
O_CREAT文件不存在则创建,此时mode参数有效
O_EXCL与O_CREAT搭配使用,测试文件是否存在,存在返回错误
O_TRUNC若文件存在,则清除文件原有的内容
O_APPEND以尾部插入的方式进行写入

mode:表示文件的权限,是可读可写可执行,以八进制表示。实际权限 = mode & (~umask) 

具体权限参考博文"4.Linux_Shell命令"中的"3、修改文件权限“章节,博文链接如下:

4.Linux_Shell命令-CSDN博客

注意:open函数只能打开设备文件,不能创建设备文件

2、关闭文件

int close(int fd);

返回值:成功返回0,失败返回EOF

fd:要关闭的文件描述符

注意:文件关闭后,fd不再能代表文件

读写与光标

读写文件的使用方式与标准I/O中的fread、fwrite非常相似。

1、读取文件

ssize_t read(int fd, void *buf, size_t count);

返回值:成功返回实际读取的大小,失败返回EOF,读取到末尾返回0

fd:要进行操作的文件的文件描述符

buf:读取数据缓冲区,用于存放读取的数据

count:想要读取数据的个数,单位:字节

注意:返回值不一定等于count,假如文件只有3个字节,count传入5,那么返回值是3

注意:count值不能超过buf的大小

注意:read不会因为遇到回车就停止读取,只有读完count个字节后才会停止

2、写入文件

ssize_t write(int fd, const void *buf, size_t count);

返回值:成功返回实际写入的大小,失败返回EOF

fd:要进行操作的文件的文件描述符

buf:写入数据缓冲区,用于存放要写入的数据

count:想要写入的数据个数,单位:字节

3、定位文件

off_t lseek(int fd, off_t offset, int whence);

返回值:成功返回当前文件读写位置,失败返回EOF

offset、whence含义与fseek完全一致,参考博文"9.2 Linux_标准I/O_相关函数"的"2、流定位"章节,博文链接为:9.2 Linux_标准I/O_相关函数-CSDN博客

整体实验

具体代码实现如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(){
	int fd;
	char read_buf[100] = {0};
	//1.打开文件
	if((fd = open("./file",O_RDWR|O_CREAT|O_TRUNC,0777)) == -1){
		perror("open");
		return -1;
	}
	//2.写入数据
	if(write(fd,"write\n",strlen("write\n")) == -1){
		perror("write");
		return -1;
	}
	//3.重置光标
	lseek(fd,0,SEEK_SET);
	//4.读取数据
	read(fd,read_buf,sizeof(read_buf));
	printf("read:%s",read_buf);
	//5.关闭文件
	close(fd);
	return 0;
}

代码运行结果如下:

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

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

相关文章

CUDA安装教程+显卡驱动安装

CUDA安装教程显卡驱动安装 新的ubuntu系统&#xff0c;需要重新安装显卡驱动&#xff0c;以及cuda&#xff0c;记录以下坑点&#xff1a; 先安装显卡 nvidia-smi输入后出现 首先知道自己的GPU型号&#xff0c;如RTX 4090 这里下载&#xff1a;https://www.nvidia.com/Down…

自动化学习2:pytest的高级用法(mark标记/fixture/hook)

一.mark的用法 概念&#xff1a;Pytest提供的mark标记&#xff0c;允许我们标记测试函数&#xff0c;测试类和整个模块。通过不同的标记实现不同的运行策略&#xff0c;如标记冒烟测试用例。 1.注册标记 可以在pytest.ini文件注册自定义标记 除了自己注册的标记外&#xff0…

网安新声 | 黎巴嫩BP机爆炸事件带来的安全新挑战与反思

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 9月17日&#xff0c;黎巴嫩境内发…

一文学会 Java 8 的Predicates

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 在这份详细的指南中&#xff0c;您将了解 Java Predicates&#xff0c;这是 Java 8 中一个新颖且有用的特性。本文解释了 Java Predicates 是什么以及如何在各种情况下使用它们。 在这份详尽的指南中…

828华为云征文|Flexus X实例安装H5ai目录列表程序

828华为云征文&#xff5c;Flexus X实例安装H5ai目录列表程序 引言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 主要使用场景 二、购买Flexus云服务器X实例2.1 购买规格参考2.2 查看Flexus云服务器X实例状态 三、远程连接Flexus云服务器X实例3.1 重置密码3.2 本…

sleuth(micrometer)+zipkin 实现链路追踪

目录 sleuth 介绍 相关术语 Trace Span Annotation 使用 依赖 参考 Zipkin 介绍 使用 下载最新版并使用 客户端集成 参考 sleuth 介绍 Spring Cloud Sleuth 能够跟踪您的请求和消息&#xff0c;以便您可以将该通信与相应的日志条目相关联。 您还可以将跟踪信息…

saltstack高级用法

一、saltstack的高级用法 一、job管理 1、job简介 Jid&#xff1a;job id&#xff0c;格式为%Y%m%d%H%M%S%fmaster在下发指令消息时&#xff0c;会附带上产生的Jid&#xff0c;minion在接收到指令开始执行时&#xff0c;会在本地的cachedir&#xff08;默认是/var/cache/salt/…

git add成功后忘记commit的文件丢了?

本文目标&#xff1a;开发人员&#xff0c;在了解git fsck命令用法的条件下&#xff0c;进行git add成功但由于误操作导致丢失的文件找回&#xff0c;达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中&#xff0c;分支太多&#xff08;基线分…

网络安全等级保护 | 规范企业网络系统安全使用 | 天锐股份助力等保制度落地

在当今数字化高速发展的时代&#xff0c;网络安全对于企业的重要性日益凸显。而近年来&#xff0c;数据泄露、网络攻击等安全事件频发&#xff0c;给企业和个人带来了前所未有的挑战。在这一背景下&#xff0c;网络安全等级保护制度&#xff08;简称“等保”&#xff09;作为国…

论文 | Reframing Instructional Prompts to GPTk’s Language

作者&#xff1a;Swaroop Mishra, Daniel Khashabi, Chitta Baral, Yejin Choi, Hannaneh Hajishirzi 论文摘要&#xff1a;语言模型 (LM) 更容易遵循哪些类型的指令提示&#xff1f; 我们通过进行广泛的实证分析来研究这个问题&#xff0c;这些分析阐明了成功指令提示的重要特…

gateway--网关

在微服务架构中&#xff0c;Gateway&#xff08;网关&#xff09;是一个至关重要的组件&#xff0c;它扮演着多种关键角色&#xff0c;包括路由、负载均衡、安全控制、监控和日志记录等。 Gateway网关的作用 统一访问入口&#xff1a; Gateway作为微服务的统一入口&#xff0c…

【Unity保龄球项目】的实现逻辑以及代码解释

1.BaoLQManager.cs 这个脚本实现了基本的保龄球游戏逻辑&#xff0c;包括扔球功能。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class BaoLQManager : MonoBehaviour {// 业务逻辑1&#xff1a;把保龄球扔出去// 业务逻辑2&am…

react hooks--useRef

基本用法 在类组件中获取一个dom元素实例&#xff0c;可以通过React.CreateRef或者回调函数的方式去获取。语法&#xff1a;const refContainer useRef(initialValue);使用场景&#xff1a;在 React 中进行 DOM 操作时&#xff0c;用来获取 DOM作用&#xff1a;返回一个带有 …

TensorRT | 在多个GPU中指定推理设备

说实话&#xff0c;之前我在笔记本上都一直都是只有一块N卡&#xff0c;所以没有过多关注过这个问题。然而昨天有个人问我&#xff0c;TensorRT怎么在多个GPU中指定模型推理GPU设备&#xff1f;我查了一下&#xff0c;发现官方有几个不同的解决方案&#xff0c;个人总结了一下&…

面经 | webpack

webpack webpackloader基本语法rules自定义loader 你可以写哪些loader&#xff1f;常见loader pluginwebpack生命周期 [参考](https://blog.csdn.net/qq_17335549/article/details/137561075)常见plugin webpack 一个打包工具&#xff0c;就和npm是一个包管理工具差不多。一般…

聚观早报 | 小米新车规划曝光;北京汽车官宣更换标志

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 9月24日消息 小米新车规划曝光 北京汽车官宣更换标志 转转全资收购红布林 全新岚图梦想家乾崑版上市 微软拟推出…

SpringCloud各依赖版本选择、核心功能与组件、创建项目(注意事项、依赖)

目录 1. 各依赖版本选择2. 核心功能与组件3. 创建项目3.1 注意事项3.2 依赖 1. 各依赖版本选择 SpringCloud: 2023.0.1SpringBoot: 3.2.4。参考Spring Cloud Train Reference Documentation选择版本 SpringCloud Alibaba: 2023.0.1.0*: 参考Spring Cloud Alibaba选择版本。同时…

深度学习——线性回归

房价预测 线性模型 单层神经网络 损失函数的均方误差 训练数据 参数学习 显示解 偏导数少了负号 最优解y旁边的X少了转置符号 梯度下降 学习率选择 小批量随机梯度下降 批量规模的选择 总结

【机器学习-无监督学习】k均值聚类

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

ANSYS Workbench随机球体多孔结构三维模型

三维多孔结构广泛存在于材料科学、生物医学工程、土木工程等领域&#xff0c;如泡沫金属、骨组织、过滤介质等&#xff0c;通过ANSYS Workbench对三维多孔结构进行有限元模拟&#xff0c;是对其进行性能分析的有效手段。 在ANSYS内建立多孔结构模型可采用CAD随机球体插件专业…