当前位置: 首页 > news >正文

C库函数文件操作(fopen、fread、fwrite、fclose)

C库函数

C文件操作用库函数实现,包含在stdio.h中,系统自动打开和关闭三个标准文件:

  • 标准输入-键盘(stdin)
  • 标准输出-显示器(stdout)
  • 标准出错输出-显示器(stderr)

文件打开—fopen()

函数原型:

FILE *fopen(const char *filename, const char *mode)

该函数使用给定的模式 mode 打开 filename 所指向的文件。其中mode值为以下:

文件使用方式含义
“r”打开一个用于读取的文件。该文件必须存在。
“w”创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
“a”追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
“r+”打开一个用于更新的文件,可读取也可写入。该文件必须存在。
“w+”创建一个用于读写的空文件。
“a+”打开一个用于读取和追加的文件。

返回值:该函数返回一个 指向文件结构体的FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。

文件读/写

函数原型:

size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );
size_t fwrite ( void *ptr, size_t size, size_t count, FILE *fp );

fread() 函数用来从指定文件中读取块数据。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制。对参数的说明:

  • ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr 用来存放读取到的数据,fwrite() 中的 ptr 用来存放要写入的数据。
  • size:表示每个数据块的字节数。
  • count:表示要读写的数据块的块数。
  • fp:表示文件指针。

理论上,每次读写 size*count 个字节的数据。

返回值:返回成功读写的块数,也即 count
如果返回值小于 count:

  • 对于 fwrite() 来说,肯定发生了写入错误,可以用 ferror() 函数检测。
  • 对于 fread() 来说,可能读到了文件末尾,可能发生了错误,可以用 ferror()feof() 检测。

文件关闭—fclose()

函数原型:fclose(fp)
作用:关闭fp指向的文件,使文件指针变量与文件“脱销”,释放文件结构体和文件指针。正常关闭返回0;出错时返回非0;

C库函数读写文件示例

编程,打开文件a.txt,将文件中的内容复制到文件c.txt中

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h> //文件信息控制
#define count 1 //数据块的个数
int main(int args,char*argv[])
{FILE *fp1,*fp2;long len=0;char *p;p=(char*)malloc(sizeof(char)*count);fp1=fopen("a.txt","r"); //以只读方式打开文件if(fp1==NULL){printf("Open a.txt fail!");exit(1);}fp2=fopen("c.txt","w+");if(fp2==NULL){printf("Open c.txt fail!");exit(1);}while(fread(p,sizeof(char),count,fp1)==1) //读取一个字符{fwrite(p,sizeof(char),count,fp2);len++;}fclose(fp1);fclose(fp2);free(p); //释放空间return 0;
}

相关文章:

C库函数文件操作(fopen、fread、fwrite、fclose)

C库函数 C文件操作用库函数实现&#xff0c;包含在stdio.h中&#xff0c;系统自动打开和关闭三个标准文件&#xff1a; 标准输入-键盘&#xff08;stdin&#xff09;标准输出-显示器&#xff08;stdout&#xff09;标准出错输出-显示器&#xff08;stderr&#xff09; 文件打…...

【Java|golang】1798. 你能构造出连续值的最大数目

给你一个长度为 n 的整数数组 coins &#xff0c;它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币&#xff0c;它们的和为 x &#xff0c;那么称&#xff0c;你可以 构造 出 x 。 请返回从 0 开始&#xff08;包括 0 &#xff09;&a…...

VB 消息、消息队列、事件

windows是图像化界面&#xff0c;多任务消息windows系统将消息&#xff08;大的结构&#xff09;发给其他应用程序Windows消息包含了所有的外部输入或者计算机内部信息&#xff0c;应用程序的消息队列先进先出&#xff0c;Windows消息的循环--每个应用程序里有自己的消息循环外…...

Linux实用指令记录

du Linux du&#xff08;英文全拼&#xff1a;disk usage&#xff09;命令用于显示目录或文件的大小。du 会显示指定的目录或文件所占用的磁盘空间。用例&#xff1a;当前路径/home/hzf/Voice/wespeaker-master$ du -h -d 1 371G ./examples 52K ./tools 280K ./run…...

Jetpack Compose中的绘制流程和自定义布局

Jetpack Compose中绘制流程的三个阶段 与大多数其他界面工具包一样&#xff0c;Compose 会通过几个不同的“阶段”来渲染帧。如果我们观察一下 Android View 系统&#xff0c;就会发现它有 3 个主要阶段&#xff1a;测量、布局和绘制。Compose 和它非常相似&#xff0c;但开头…...

笔试题-2023-芯动-数字IC设计【纯净题目版】

回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.07.23应聘岗位:数字IC设计笔试时长:120min笔试平台:nowcoder牛客网题目类型:单选题(10道)、不定项选择(5道)、填空(5道)、问…...

高压放大器在孔道灌浆非线性超声测试中的应用

实验名称&#xff1a;高压放大器在孔道灌浆非线性超声测试中的应用研究方向&#xff1a;无损检测测试目的&#xff1a;超声波作为频率高于20kHz的声波被广泛应用于各类结构的无损检测中&#xff0c;以超声波作为探伤波的无损检测法称为超声波无损检测法&#xff0c;简称超声波法…...

vue3响应式原理

通过Proxy(代理): 拦截对data任意属性的进行操作, 包括属性值的增删改查 通过 Reflect(反射): 动态对被代理对象的相应属性进行特定的操作 通过采用两者结合使用的方式实现响应式 Proxy 对象用于创建一个对象的代理&#xff0c;从而实现基本操作的拦截和自定义&#xff08;如…...

c/c++开发,无可避免的宏定义使用案例

一、c/c宏定义的来源 宏定义&#xff0c;就是用一个标识符来表示一个字符串&#xff0c;如果在后面的代码中出现了该标识符&#xff0c;那么就全部替换成指定的字符串。通常c/c宏定义这几处出处&#xff1a; 1&#xff09;最常见的就是来自于开发者编码过程中采用宏定义命令“#…...

SaaS的阴暗面:网络攻击武器化、平民化

你不一定懂编程&#xff0c;甚至都看不懂几行代码&#xff0c;但依然能成为杀伤力十足的黑客&#xff0c;这就是现阶段不少网络攻击的特点&#xff1a;不需要掌握娴熟的技术或代码&#xff0c;仅仅利用成熟的武器化工具&#xff0c;就能通过简单的“一键操作”&#xff0c;对目…...

『CV学习笔记』图像处理透视变换(Python+Opencv)

图像处理透视变换(Opencv) 文章目录 一. 透视变换定义二. 代码实现2.1. order_points函数2.2. four_point_transform函数2.3. 程序主函数三. 参考文献一. 透视变换定义 【图像处理】透视变换 Perspective Transformation原理:https://blog.csdn.net/xiaowei_cqu/article/detai…...

使用Fetch时,post数据时,后端接收的Content-Type为text/plain

在使用 Fetch做一个前端的post请求时&#xff0c;直接从网上抄了一段代码 export async function postData(url, data){const response await fetch(url, {method: POST, // *GET, POST, PUT, DELETE, etc.mode: no-cors, // no-cors, *cors, same-originheaders: { Content-…...

大型智慧校园系统源码 智慧校园源码 Android电子班牌源码

一款针对中小学研发的智慧校园系统源码&#xff0c;智慧学校源码带电子班牌、人脸识别系统。系统有演示&#xff0c;可正常上线运营正版授权。 私信了解更多&#xff01; 技术架构&#xff1a; 后端&#xff1a;Java 框架&#xff1a;springboot 前端页面&#xff1a;vue e…...

【MySQL】你知道的MySQL中的集合函数有哪些呢?

集合函数排名AVG&#xff08;&#xff09;函数COUNT()函数SUM&#xff08;&#xff09;函数MAX&#xff08;&#xff09;函数 和 MIN&#xff08;&#xff09;函数总结大家好&#xff0c;我是小冷。 上一篇写了 看看ChatGPT是如何回答面试官的问题的&#xff1f; 地址是&#x…...

科目一罚款题

第一种&#xff1a;20~200元关键字&#xff1a;遮车牌、改信息1、故意使用物品遮挡号牌的2、号牌刮花严重&#xff0c;掉漆未处理继续使用的3、驾驶人联系方式、地址等信息发生变化时&#xff0c;没有及时申报变更信息的4、驾驶人不在现场、或虽在现场但拒绝立即驶离&#xff0…...

Maven中央仓库地址大全

一、仓库地址配置方式关于 Maven 远程仓库地址的配置方式有两种&#xff1a;第1种&#xff1a;直接在项目的 pom.xml 文件中进行修改&#xff08;不推荐&#xff0c;尤其是在多人协助的开发过程中非常的费事费力&#xff09;&#xff1b;第2种&#xff1a;将 Maven 的远程仓库统…...

人工智能的未来———因果推理what if 第11章(统计模型) 文章解读

我们在观察数据当中,一般使用样本均值去估计目标人群的均值 在所有情况都是理想的情况下: 平均因果效应...

百度贴吧发帖软件如何发布?

百度贴吧发帖软件如何发布&#xff1f;贴吧软件发帖顶帖视频教学&#xff0c;防删图技术视频教学#贴吧发帖#贴吧顶帖 大家好&#xff0c;今天给大家讲一下一个贴软件发电机顶帖的视频教学。先给大家讲一下软件一个发帖。今天我们用的一个软件叫做神机。神机我们现在看到的软件…...

如何成为java架构师?2023版Java架构师学习路线总结完成,真实系统有效,一切尽在其中

导读 从初级Java工程师成长为Java架构师&#xff0c;你需要走很长的路&#xff0c;很多有计划的人在学习之初就在做准备。你知道Java架构师学习路线该怎么走吗?成为一个优秀的Java架构师究竟需要学什么?接下来就跟小编一起揭晓答案。 架构师是一个充满挑战的职业&#xff0…...

tkinter 实现选择文件夹或者多个文件

import tkinter as tk from tkinter import filedialog def select_file(): # 单个文件选择 selected_file_path filedialog.askopenfilename() # 使用askopenfilename函数选择单个文件 select_path.set(selected_file_path) def select_files(): # 多个文件…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...