Linux FILE文件操作2- fopen、fclose、fgetc、fputc、fgets、fputs验证

目录

 1.fopen 打开文件

1.1 只读打开文件,并且文件不存在

1.2 只写打开文件,并且文件不存在

1.3 只写打开文件,并且文件存在,且有内容

1.4 追加只写打开文件,并且文件不存在

2. fclose 关闭文件

3. fgetc 读取一个字符

4.fputc 写入一个字符

5.fgets 从文件中读取一行字符串

(1)读取的字节数小于文件一行内容,提前结束读取

(2)读取的字节数小于文件一行内容,提前结束读取

6.fputs 向文件写入一个字符串


 1.fopen 打开文件

函数原型:

/* 功能:创建或者打开一个文件
参数:
path:文件名,如果只写文件名,默认就是当前路径,也可以添加路径
mode:文件权限
r 只读打开:如果文件不存在则报错,文件存在只读打开
r+ 读写打开,如果文件不存在则报错,文件存在读写打开
w 只写打开,如果文件不存在则创建;如果文件存在则清空,只写打开;
w+ 读写打开,如果文件不存在则创建;如果文件存在则清空,读写打开
a 追加只写打开,如果文件不存在则创建;如果文件存在直接追加,只写打开
a+ 追加读写打开,如果文件不存在则创建;如果文件存在则追加读写打开返回值:成功:文件指针失败:NULL */
FILE *fopen(const char *path, const char *mode);

1.1 只读打开文件,并且文件不存在

程序:

#include <stdio.h>int test1()
{//使用fopen函数打开或者创建文件,返回文件指针FILE *fp = NULL;//以只读的方式打开文件,如果文件不存在则报错fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose关闭文件fclose(fp);
}int main(int argc, char *argv[])
{test1(fp);return 0;
}

运行结果:

1.2 只写打开文件,并且文件不存在

程序:

#include <stdio.h>int test2()
{//使用fopen函数打开或者创建文件,返回文件指针FILE *fp = NULL;//以只写的方式打开文件,如果文件不存在则创建,如果文件存在清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose关闭文件fclose(fp);
}int main(int argc, char *argv[])
{    test2();return 0;
}

运行结果:

1.3 只写打开文件,并且文件存在,且有内容

程序:与3.2只写打开文件,并且文件不存在,程序相同

运行结果:

1.4 追加只写打开文件,并且文件不存在

程序:

#include <stdio.h>int test3()
{//使用fopen函数打开或者创建文件,返回文件指针FILE *fp = NULL;//以只写的方式打开文件,如果文件不存在则创建,文件存在则追加fp = fopen("./file.txt", "a");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose关闭文件fclose(fp);
}int main(int argc, char *argv[])
{test3();return 0;
}

运行结果:

2. fclose 关闭文件

/*
功能:关闭一个文件指针,无法在对当前文件进行操作
参数:
stream:指定的文件指针,fopen函数的返回值返回值:
成功:0
失败:EOF注意:注意一个文件只能关闭一次,不能多次关闭。
关闭文件之后就不能再文件指针对文件进行读写等操作了。
*/
int fclose(FILE *stream);

程序:见fopen 打开文件,程序最后。

3. fgetc 读取一个字符

函数原型:

 /* 功能:从文件指针标识的文件中读取一个字符参数:stream:指定的文件指针返回值:成功:读取的字符失败:EOF如果文件读取完毕,也会返回EOF */int fgetc(FILE *stream);

程序:

#include <stdio.h>int test1()
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgetc从文件中读取一个字符int c = fgetc(fp);printf("c = [%c] - %d\n", c, c);printf("test1 end \n");
}int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//文件的每一行结束的位置都有一个标识,是一个换行符,称之为行结束符//fgetc可以读取到行结束符int c;while((c = fgetc(fp)) != EOF){printf("c = [%c] - %d  ", c, c);}printf(" \ntest1 start \n");test1();return 0;
}

运行结果:

4.fputc 写入一个字符

函数原型:

 /* 功能:向文件指针标识的文件中写入一个字符参数:c:要写入的字符stream:指定的文件指针返回值:成功:要写入的字符失败:EOF */
int fputc(int c, FILE *stream);

程序:

#include <stdio.h>int test1()
{FILE *fp = NULL;//只写打开./file.txt,不存在则创建文件,文件存在则清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}int i;//通过fputc函数向文件写入一个字符i = fputc('h', fp);i = fputc('e', fp);i = fputc('l', fp);i = fputc('\n', fp);i = fputc('l', fp);i = fputc('o', fp);if(i ==  EOF){printf("fail to fputc\n");return -1;}return 0;
}int main(int argc, char *argv[])
{test1();return 0;
}

运行结果:

5.fgets 从文件中读取一行字符串

函数原型:

 /* 功能:从文件中读取内容
参数:
s:保存读取到的内容
size:每次读取的最大个数
stream:文件指针返回值:
成功:读取的数据的首地址
失败:NULL如果文件内容读取完毕,也返回NULL注意:从stream所指的文件中读取字符,在读取的时候碰到换行符或者是碰到文件的末尾停止读取,或者是读取了size‐1个字节停止读取,在读取的内容后面会加一个\0,作为字符串的结尾 */
char *fgets(char *s, int size, FILE *stream);

(1)读取的字节数小于文件一行内容,提前结束读取

程序:

#include <stdio.h>//fgets读取的字节数大于文件一行内容,碰到 换行符 \n 提前结束读取
int test1() 
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets读取文件内容//fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回char buf[32] = {0};//从fp里读取32个字节到buffgets(buf, 32, fp);printf("buf = %s\n", buf);printf("test1 end \n");
}int main(int argc, char *argv[])
{printf("test1 start \n");test1();return 0;
}

运行结果:

(2)读取的字节数小于文件一行内容,提前结束读取

程序:

#include <stdio.h>//fgets读取的字节数小于文件一行内容,提前结束读取 
int test2() 
{FILE *fp = NULL;//file.txt内容 0123459789abcdefghijABCDEFGHIJfp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets读取文件内容//fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回char buf[32] = {0};//从fp里读取15个字节到buffgets(buf, 15, fp);printf("buf = %s\n", buf);printf("test2 end \n");
}int main(int argc, char *argv[])
{printf("test2 start \n");test2();return 0;
}

运行结果:

6.fputs 向文件写入一个字符串

函数原型:

 /* 功能:向文件写入数据参数:s:要写入的内容stream:文件指针返回值:成功:写入文件内容的字节数失败:EOF */
int fputs(const char *s, FILE *stream);

程序:

#include <stdio.h>int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//通过fputs函数向文件写入数据fputs("0123459789\n", fp);fputs("ABCDEFGHIJ", fp);fputs("9876543210", fp);return 0;
}

运行结果:

file.txt内容:

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

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

相关文章

如何检查CMS建站系统的插件是否安全?

检查好CMS建站系统的插件安全是确保网站安全的重要环节&#xff0c;对于常见的安全检查&#xff0c;大家可以利用以下几种有效的方法和工具&#xff0c;来帮你评估插件的安全性。 1. 检查插件来源和开发者信誉 选择可信来源&#xff1a;仅从官方插件库或可信的第三方开发者处…

使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题

目录 1、问题描述 2、用Dependency Walker工具打开qr.dll库&#xff0c;查看库与库的依赖关系以及接口调用情况&#xff0c;定位问题 3、使用Beyond Compare工具比较一下正常的msvcr100d.dll和问题msvcr100d.dll的差异 4、最后 C软件异常排查从入门到精通系列教程&#xff…

2025.3.17总结

今天又是不开心得一天&#xff0c;回归一个问题单&#xff0c;晚上看了下科目四&#xff0c;不到九点就领夜宵回去了。 每次干得不开心&#xff0c;总会有跑路得念头&#xff0c;真的卷不动了&#xff0c;考个试考到抑郁&#xff0c;考到怀疑人生。还没等他人辞退&#xff0c;…

【CF】Day9——Codeforces Round 953 (Div. 2) BCD

B. New Bakery 题目&#xff1a; 思路&#xff1a; 被标签害了&#xff0c;用什么二分&#xff08; 很简单的思维题&#xff0c;首先如果a > b&#xff0c;那么全选a就行了&#xff0c;还搞啥活动 否则就选 b - a 天来搞活动&#xff0c;为什么&#xff1f; 首先如果我…

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析

前言 在自然语言处理&#xff08;NLP&#xff09;和深度学习的快速发展中&#xff0c;Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍&#xff0c;涵盖它们的提出时间、网络结构等关键信息&#xff0c;能够快速的理解这些模型的设…

Spring Security 教程:从入门到精通(含 OAuth2 接入)

Spring Security 教程&#xff1a;从入门到精通&#xff08;含 OAuth2 接入&#xff09; Spring Security 是 Spring 框架中备受推崇的安全模块&#xff0c;广泛应用于构建安全可靠的企业级应用程序。它提供了一套全面的解决方案&#xff0c;涵盖身份认证&#xff08;Authenti…

OpenGL ES 入门指南:从基础到实战

引言&#xff1a;为什么需要 OpenGL ES&#xff1f; 在当今的嵌入式设备&#xff08;如智能手机、汽车仪表盘、智能家居中控屏&#xff09;中&#xff0c;流畅的图形渲染能力是用户体验的核心。OpenGL ES&#xff08;OpenGL for Embedded Systems&#xff09; 作为行业标准&am…

java的WeakHashMap可以用来做缓存使用?强软弱虚四种引用对比

在 Java 中&#xff0c;引用&#xff08;Reference&#xff09;机制用于管理对象的生命周期和垃圾回收。Java 提供了四种类型的引用&#xff1a;强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Refer…

51单片机指令系统入门

目录 基本概念讲解 一、机器指令​ 二、汇编指令​ &#xff08;一&#xff09;汇编指令的一般格式 &#xff08;二&#xff09;按字节数分类的指令 三、高级指令 总结​ 基本概念讲解 指令是计算机&#xff08;或单片机&#xff09;中 CPU 能够识别并执行的基本操作命令…

使用 Docker 部署 MySQL 8

使用 Docker 部署 MySQL 8 详细指南 MySQL 是一个广泛使用的开源关系型数据库管理系统。通过 Docker 部署 MySQL 8 可以快速搭建一个可移植、可扩展的数据库环境。本文将详细介绍如何使用 Docker 部署 MySQL 8&#xff0c;并讲解如何根据需求配置 MySQL。 从拉取镜像开始的详细…

AtCoder Beginner Contest 397(ABCDE)

目录 A - Thermometer 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; B - Ticket Gate Log 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; C - Variety Split Easy 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; D - Cubes 翻译&#xff1a…

数模AI使用教程(新) 2025.3.17

DeepseekR1doubao1.5大模型组合&#xff0c;数模智能体题目解答一等水平&#xff0c;另外也有统计建模、期刊复现智能体。 功能&#xff1a;问题重述、解释数据文件、深度思考与逻辑梳理、问题关键点分析、知识整理、查找数据源、问题分析、使用方法推荐[会询问要求]、模型建立…

Spring Cloud Gateway 生产级实践:高可用 API 网关架构与流量治理解析

API 网关的核心价值 在分布式微服务架构中&#xff0c;API 网关作为系统流量的唯一入口&#xff0c;承担着路由分发、安全防护、流量治理三大核心职责。Spring Cloud Gateway 基于响应式编程模型与 Netty 高性能网络框架&#xff0c;提供灵活的路由规则、动态过滤器链和深度集…

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后&#xff0c;终于找到的解决的方案&#xff0c;遂将该方法简要的记录下来&#xff0c;以备后用&#xff0c;并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下&#xff0c;假…

宽带(Broadband)

宽带&#xff08;Broadband&#xff09; 是一种高速互联网接入技术&#xff0c;能够同时传输多种类型的数据&#xff08;如语音、视频、文本等&#xff09;。与传统的窄带&#xff08;如拨号上网&#xff09;相比&#xff0c;宽带提供了更高的数据传输速率和更稳定的连接&#…

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…

VLLM:虚拟大型语言模型(Virtual Large Language Model)

VLLM&#xff1a;虚拟大型语言模型&#xff08;Virtual Large Language Model&#xff09; VLLM指的是一种基于云计算的大型语言模型的虚拟实现。它通常是指那些由多个服务器组成的分布式计算环境中的复杂机器学习模型&#xff0c;这些模型能够处理和理解大量的文本数据。VLLM的…

Springboot+Vue登录、注册功能(含验证码)(后端!)

我们首先写一个接口&#xff0c;叫login&#xff01;然后对传入一个user&#xff0c;因为我们前端肯定是要传过来一个user&#xff0c;然后我们后端返回一个user&#xff0c;因为我们要根据这个去校验&#xff01;我们还引入了一个hutool的一个东西&#xff0c;在pom文件里面引…

冯 • 诺依曼体系结构

冯 • 诺依曼体系结构 一、冯 • 诺依曼体系结构推导阶段 1&#xff1a;初始计算机体系结构&#xff08;仅输入、运算、输出&#xff09;阶段 2&#xff1a;加入控制功能&#xff0c;初步形成 CPU 概念阶段 3&#xff1a;性能瓶颈与引入内存阶段 4&#xff1a;最终冯诺依曼体系…

Python print() 打印多个变量时,可变对象和不可变对象的区别

先来看这段代码&#xff1a; tmp [] print(tmp, tmp.append(1), tmp)输出&#xff1a; [1] None [1]并不是一些人认为的 [] None [1] 这是因为列表是可变对象&#xff0c;print()打印前会先计算出所有结果&#xff0c;最后再打印出来&#xff0c;中间在列表中添加了1&#…