9.3 Linux_I/O_文件I/O相关函数

news2024/12/23 8:35:51

打开与关闭

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/2173026.html

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

相关文章

深入浅出CSS盒子模型

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;什么是盒子模型&#xff1f;盒子模型的组成部分详解1. 内容区&#xff08;Content&#xff09;2. 内边距&#xff08;Padding&#xff09;3. 边框&#xff08;Border&am…

『功能项目』下载Mongodb【81】

下载网址&#xff1a;Download MongoDB Community Server | MongoDB 点击安装即可 选择Custom 此时安装已经完成 桌面会创建图标 检查是否配置好MongoDB 输入cmd命令行 Windows键 R 打开命令行 输入cmd 复制安装路径 复制data路径 如果输出一大串代码即配置mongdb成功

Mysql高级篇(中)——锁机制

锁机制 一、概述二、分类1、读锁2、写锁★、FOR SHARE / FOR UPDATE&#xff08;1&#xff09;NOWAIT&#xff08;2&#xff09;SKIP LOCKED&#xff08;3&#xff09;NOWAIT 和 SKIP LOCKED 的比较 ★、 脏写3、表级锁之 S锁 / X锁&#xff08;1&#xff09;总结&#xff08;2…

免费视频无损压缩工具+预览视频生成工具

视频无损压缩工具 功能与作用 &#xff1a;视频无损压缩工具是一种能够减少视频文件大小&#xff0c;但同时保持视频质量的工具。它通过先进的编码技术和算法&#xff0c;有效降低视频文件的存储空间&#xff0c;同时保证视频的清晰度和观感。这对于需要分享或存储大量视频内容…

ZLMediaKit快速上手【保姆级简单快速版】

一、前言 1、ZLMediaKit使用场景 最近在写一个摄像头检测的项目&#xff0c;其中需要做拉流测试&#xff0c;但是摄像头数量不够用&#xff0c;如果直接重复拉流可能会出现问题&#xff0c;使用ZLMediaKit&#xff08;一个基于C11的高性能运营级流媒体服务框架&#xff09;可…

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击

对抗攻击方法详解&#xff1a;梯度攻击、转移攻击与模型集成攻击 近年来&#xff0c;随着深度学习模型在各个领域取得惊人突破&#xff0c;对抗攻击&#xff08;Adversarial Attack&#xff09; 逐渐成为研究热点。对抗攻击旨在通过在输入数据上施加精心设计的微小扰动&#x…

Doris安装部署指南

Doris安装部署指南 一、环境准备二、下载并解压安装包三、配置FE和BEFE配置BE配置四、验证集群状态五、集群扩容与缩容六、总结Apache Doris(原百度Palo)是一款基于MPP架构的高性能、实时的分析型数据库。它支持标准SQL,高度兼容MySQL协议,能够运行在绝大多数主流的商用服务…

第50篇 汇编语言实现中断<六>

Q&#xff1a;怎样设计汇编语言程序使用定时器中断实现实时时钟&#xff1f; A&#xff1a;此前我们曾使用轮询定时器I/O的方式实现实时时钟&#xff0c;而在本实验中将采用定时器中断的方式。新增的interval_timer.s间隔定时器的中断服务程序中增加了TIME变量&#xff0c;还更…

<<迷雾>> 第 1 章 了解计算机, 要从电开始 示例电路

简单灯泡电路 info::操作说明 灯的亮起有一定的延时, 需要过一会才逐渐亮起来 另: 可通过 “菜单–选项–显示电流” 控制是否显示电流 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdm…

Unity XR 环境检测

需求&#xff1a; 检测环境是XR还是手机 代码&#xff1a; using UnityEngine.XR;public class EnvmentUtility {/// <summary>/// 是否是XR环境/// </summary>/// <returns>如果是XR&#xff0c;返回true&#xff0c;否则false</returns>public sta…

Gin框架简易搭建(3)--Grom与数据库

写在前面 项目地址 个人认为GORM 指南这个网站是相比较之下最为清晰的框架介绍 但是它在环境搭建阶段对于初学者而言不是很友好&#xff0c;尤其是使用mysql指令稍有不同&#xff0c;以及更新的方法和依赖问题都是很让人头疼的&#xff0c;而且这些报错并非逻辑上的&#xf…

linux 下的静态库与动态库

目录 一、介绍 1、静态库 2、动态库 二、操作 1、静态库 2、动态库 3、使用库文件 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二 &#xff08;3&#xff09;方法三 一、介绍 1、静态库 静态链接库实现链接操作的方式很简单&#xff0c;即程序文…

vue启动报错

vue执行npm run dev报错如下 Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:69:19)at Object.createHash (node:crypto:133:10)at module.exports (F:\ray\taisheng-erp-frontend-master\node_modules\webpack\lib\ut…

深信服2025届全球校招研发笔试-C卷(AK)

前面14个填空题 T1 已知 子数组 定义为原数组中的一个连续子序列。现给定一个正整数数组 arr&#xff0c;请计算该数组内所有可能的奇数长度子数组的数值之和。 输入描述 输入一个正整数数组arr 输出描述 所有可能的奇数长度子数组的和 示例 1 输入 1,4,2,5,3 输出 58 说明 …

[论文精读]Polarized Graph Neural Networks

论文网址&#xff1a;Polarized Graph Neural Networks | Proceedings of the ACM Web Conference 2022 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于…

Junit 5 - 理解Mockito,提高UT 覆盖率

前言 当我是1个3年初级程序员时&#xff0c; 我被面试者问到1个问题&#xff1a; 如何保证你的开发任务交付质量 当我是1个7年开发组长时&#xff0c; 我被面试者问到另1个问题&#xff1a;如何保证你的团队的代码质量&#xff0c; 减少rework。 又若干年后&#xff0c; 我才…

代码随想录Day 58|拓扑排序、dijkstra算法精讲,题目:软件构建、参加科学大会

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part08**拓扑排序精讲**题目&#xff1a;117. 软件构建拓扑排序的背景解题思路&#xff1a;模拟过程 **dijkstra&#xff08;朴素版&#xff09;精讲**题目&#xff1a;47. 参加科学大会解题思…

leetcode每日一题day14(24.9.24)——字符串最多的子序列

思路:对于应该首要和贡献联系起来&#xff0c;对于什么是贡献呢&#xff0c;即在某种情况下&#xff0c;会贡献出多少种&#xff0c;符合要求的结果&#xff0c;此题属于较为基础的&#xff0c;对于text中的一个字符如果是非pattern中的元素&#xff0c;则对结果无任何影响&…

舒舒活动图片 小暑至,暑气湿气缠身怎么办?中医教你消暑宁心,健脾祛湿

小暑标志着酷夏的到来&#xff0c;闷热潮湿的气候令人不适&#xff0c;仿佛暑湿交织笼罩全身。众多友人诉苦不已&#xff0c;此般环境致使心绪不宁、身躯疲惫&#xff0c;失措寻对策。实则无需忧虑&#xff0c;持之以恒地进行消暑养心、健脾除湿&#xff0c;便能安然度夏。 暑气…

Vue 技术入门 day1 模版语法、数据绑定、事件处理、计算属性与监视、class和style绑定、条件渲染v-if/v-show、列表渲染v-for

目录 1.Vue 核心 1.1. Vue 简介 1.1.1 介绍与描述 1.1.2 Vue 的特点 1.2 模板语法 1.2.1 模板的分类 1.2.2 插值语法 1.2.3 指令语法 1.2.4 实例 1.3 数据绑定 1.3.1 单向数据绑定 1.3.2 双向数据绑定 1.3.3 MVVM 模型 1.3.4 data与el的2种写法 1.3.5 实例 1.3.…