5.2 标准IO:文件的打开、关闭及代码实现

news2024/12/23 0:45:22

目录

标准IO

文件的打开

标准I/O-fopen-mode参数

​编辑

标准I/O-fopen-示例

标准I/O-fopen-新建文件权限

标准I/O-处理错误信息

标准I/O-错误信息处理-示例1

标准I/O-错误信息处理-示例2

文件的关闭 


标准IO

文件的打开

打开就是占用资源

下列函数可用于打开一个标准I/O流:

FILE *fopen (const char *path, const char *mode);

const char *path //打开一个路径包含文件名,path:普通文件当前路径不需要加目录,其他要使用完整的路径
const char *mode //打开文件的模式

mode:

返回值:出错返回NULL,所以fopen函数必须判断是否为空

成功时返回流指针;出错时返回NULL

标准I/O-fopen-mode参数

mode参数:(重点) 

“r” 或 “rb”

以只读方式打开文件,文件必须存在。

“r+” 或 ”r+b”

以读写方式打开文件,文件必须存在。

“w” 或 “wb”

以只写方式打开文件,若文件存在则文件长度清为0。若文件不存在则创建。

“w+” 或 “w+b”

以读写方式打开文件,其他同”w”。

“a” 或 “ab”

以只写方式打开文件,若文件不存在则创建;向文件写入的数

据被追加到文件末尾。

“a+” 或 “a+b”

以读写方式打开文件。其他同”a”

标准I/O-fopen-示例

#include <stdio.h>
int main(int argc,  char *argv[])
{
   FILE *fp;
   if ((fp = fopen(“test.txt”, “r+”)) == NULL) {
       printf(“fopen  error\n”);
       return -1;
   }
   ……
   return  0;
 }

标准I/O-fopen-新建文件权限

fopen() 创建的文件访问权限是0666(rw-rw-rw-)

Linux系统中umask设定会影响文件的访问权限,其规则为(0666 & ~umask)

Root用户是 022 普通用户是002

用户可以通过umask函数或者命令修改相关设定

如果希望umask不影响文件访问权限,该如何设定?

标准I/O-处理错误信息

extern int  errno;
void perror(const char *s);
char *strerror(int errno);

errno 存放错误号,由系统生成

perror先输出字符串s,再输出错误号对应的错误信息

strerror根据错误号返回对应的错误信息

标准I/O-错误信息处理-示例1

#include <stdio.h>

int main(int argc,  char *argv[])
{
   FILE *fp;
    
   if ((fp = fopen(“test.txt”, “r+”)) == NULL) {
       perror(“fopen”);
       return -1;
   }
   ……
  fopen: No such file or directory 

标准I/O-错误信息处理-示例2

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc,  char *argv[])
{
   FILE *fp;
   if ((fp = fopen(“test.txt”, “r+”)) == NULL) {
       printf(“fopen: %s\n”, strerror(errno));
       return -1;
   }
   ……
  fopen: No such file or directory 

文件的关闭 

关闭就是释放资源

int fclose(FILE *stream);

fclose()调用成功返回0,失败返回EOF,并设置errno

流关闭时自动刷新缓冲中的数据并释放缓冲区

当一个程序正常终止时,所有打开的流都会被关闭。

流一旦关闭后就不能执行任何操作

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

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

相关文章

四个PCB工程师最头痛的Allegro问题及解答,你一定要看

Allegro是一款功能强大的PCB设计软件&#xff0c;广泛应用在电子设计行业&#xff0c;在使用Allegro过程中&#xff0c;工程师会遇见到多种复杂的技术问题&#xff0c;本文将针对工程师最头痛的Allegro问题进行回答&#xff0c;希望对小伙伴们有所帮助。 1、如何创建新的Allegr…

汽车电子电气架构里的VCU DCU ZCU ECU怎么区分?

文章目录 一、VCU二、DCU三、ECU四、ZCU五、车辆电子电气架构的域架构 一、VCU VCU&#xff08;Vehicle Control Unit&#xff0c;车辆控制单元&#xff09;&#xff1a;VCU是车辆级别的控制单元&#xff0c;负责管理和协调车辆的各个系统和子系统之间的通信和协同工作。它可以…

javaweb实验:JSP+JDBC综合实训__数据库记录的修改、删除

目录 前言实验目的实验内容编程实现后台的用户管理功能 实验原理或流程图实验原理流程图 实验过程AdduserquerAllUserdoAddUser结果展示 实验结论 前言 本实验的目的是让学生掌握使用JSP和JDBC技术对数据库中的记录进行修改和删除的方法。实验内容包括以下几个部分&#xff1a…

STM32单片机蓝牙APP手势语音温控电风扇落地扇人体感应

实践制作DIY- GC0134-蓝牙APP手势语音温控电风扇 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP手势语音温控电风扇 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32单片机语音识别模块PAJ7620U2手势识别传感器DS18B20温度传感器5V风扇LCD1602显示器红外接…

机器学习算法的基本概念、分类和评价标准,以及一些常用的机器学习算法的原理和特点

机器学习是一门研究如何让计算机从数据中学习和推理的科学。机器学习算法是实现机器学习的具体方法&#xff0c;它们可以根据不同的目标、数据类型和应用场景进行分类和比较。本文将介绍机器学习算法的基本概念、分类和评价标准&#xff0c;以及一些常用的机器学习算法的原理和…

MacBook杀毒软件CleanMyMac X2023

Mac 上也广泛存在恶意软件&#xff0c;并且能够突破系统自身的防护&#xff0c;通过渠道传播到电脑上&#xff0c;威胁大家的数据安全和窃取个人信息&#xff01;所以&#xff0c;MacBook杀毒软件还是很有必要安装的。 始于颜值&#xff0c;忠于实力。CleanMyMac X是我用过UI风…

复杂软件版本如何使用git工具进行管理

1.需求说明 一个项目&#xff0c;如果长期开发下去&#xff0c;我们会碰到各种各样的客户&#xff0c;然后就会有各种各样的需求。这时候就会出现一个问题&#xff1a;如果我们的代码都是一个项目&#xff0c;客户的主体流程都是一样&#xff0c;但部分客户又有一些特别的定制…

JDK1.8 与 Language Level 8 关系

什么是Java&#xff1f; 是 SUN(Stanford University Network&#xff0c;斯坦福大学网络公司 ) 1995 年推出的一门高级 编程语言。 是一种面向 Internet 的编程语言。Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器 中运行。这些 Java 程序被称为 Java 小程序…

六级备考26天|CET-6|仔细阅读|考研英语2023年英语(一)|8:20~10:00

text1 4/5 text2 3/5 text3 2/5 text4 3/5 12/20 目录 text 1 1. 重点词汇 2. 原文 3. 题目 text 1 1. 重点词汇 sympathise / ˈsɪmpəθaɪz / vi.同情&#xff1b;吊唁&#xff1b;共鸣 &#xff08;等于 sympathize&#xff09; ener…

OJ练习第109题——根到叶路径上的不足节点

根到叶路径上的不足节点 力扣链接&#xff1a;1080. 根到叶路径上的不足节点 题目描述 给你二叉树的根节点 root 和一个整数 limit &#xff0c;请你同时删除树中所有 不足节点 &#xff0c;并返回最终二叉树的根节点。 假如通过节点 node 的每种可能的 “根-叶” 路径上值…

KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图

前言&#xff1a;KuiperInfer是一个从零实现一个高性能的深度学习推理库&#xff0c;中文教程已经非常完善了。本系列博客主要是自己学习的一点笔记和二次开发的教程&#xff0c;欢迎更多的AI推理爱好者一起来玩。这篇写一下计算图相关的知识点&#xff0c;重点说明ONNX有什么缺…

一口气整理三种不同二维码生成的Java 接入代码

引言 二维码已经成为现代社会中广泛应用的一种工具&#xff0c;它们具有快速、可靠和高容量的信息传递能力。通过扫描二维码&#xff0c;用户可以轻松获取网址、产品信息、支付链接等各种信息。 本文将介绍二维码生成器 API 作为一种工具&#xff0c;并探讨其功能和用法&…

【Linux高级 I/O(4)】异步 IO实例及其优化(全文代码)

异步 I/O 在 I/O 多路复用中&#xff0c;进程通过系统调用 select()或 poll()来主动查询文件描述符上是否可以执行 I/O 操作。 而在异步 I/O 中&#xff0c;当文件描述符上可以执行 I/O 操作时&#xff0c;进程可以请求内核为自己发送一个信号。之后进程就可以执行任何其它…

rocketmq中ConsumeThreadMax不生效原因探究

在项目中设置了ConsumeThreadMax但是消息消费时仍是单线程消费&#xff0c;故而进行追踪排查。 其根本原因是rocketmq中&#xff0c;消费者线程池队列使用的是LinkedBlockingQueue。 rocket版本&#xff1a;rocketmq-client-4.9.3 代码追踪&#xff1a;从DefaultMQPushConsu…

C++设计模式之抽象工厂模式(Abstract Factory)

文章目录 定义前言问题解决方案 结构适用场景实现方式优点缺点与其他模式的关系实例 [C]22种设计模式的C实现大纲 定义 抽象工厂是一种创建型设计模式&#xff0c;它能创建一系列相关的对象&#xff0c;而无需指定其具体类。 前言 问题 假设你正在开发一款家具商店模拟器。…

Multi-Head Attention和Transformer Decoder(GPT)详解

文章目录 一、Transformer的Attention1. Self-Attention2. Masked Self-Attention3. Multi-Head Attention 二、Transformer Decoder&#xff08;GPT&#xff09;1. GPT的网络结构2. GPT的计算原理 一、Transformer的Attention 1. Self-Attention 如前篇文章所述&#xff08;ht…

如何开发一个人人爱的组件?

组件&#xff0c;是前端最常打交道的东西&#xff0c;对于 React、Vue 等应用来说&#xff0c;万物皆组件毫不为过。 有些工作经验的同学都知道&#xff0c;组件其实也分等级的&#xff0c;有的组件可以被上万开发者复用&#xff0c;有些组件就只能在项目中运行&#xff0c;甚…

Springboot +spring security,配置多个数据源:验证不同用户表

一.简介 上篇文章写到&#xff0c;我们在配置jdbc和mybatis 来源&#xff0c;进行登录后&#xff0c;出现了如下错误! 后面解决方案是&#xff1a;屏蔽了其中一个来源&#xff0c;登陆成功&#xff0c;也分析了其原因。 但是&#xff0c;但是如果需要配置多个数据来源&#…

2023年认证杯SPSSPRO杯数学建模B题(第一阶段)考订文本全过程文档及程序

2023年认证杯SPSSPRO杯数学建模 B题 考订文本 原题再现&#xff1a; 古代文本在传抄过程中&#xff0c;往往会出现种种错误&#xff0c;以至于一部书可能流传下来多种版本。在文献学中&#xff0c;错误往往被总结成“讹”、“脱”、“衍”、“倒”等形式&#xff0c;也可能同…

cda 1级模拟题错题知识点总结

Sql truncate函数 格式&#xff1a;TRUNCATE(number, decimals) number: the number to be truncated decimals:the number of decimal places to truncate to 截断到的小数位数&#xff0c;如果为0则表示不保留小数 例如: select truncate(2.83,0) 结果为2 select truncate(…