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

文件Io编程基础

1. 标准I/O (stdio.h)

  • stdio.h 是标准C库的头文件,包含了输入输出函数的声明。
  • 位置:/usr/include/stdio.h

2. 文件I/O操作步骤

  1. 打开文件: 使用 fopen 函数,返回 FILE* 指针。
  2. 读/写操作: 使用 freadfwritefgetsfputsfprintffscanf 等函数进行文件读写操作。
  3. 关闭文件: 使用 fclose 函数关闭文件,释放资源。

3. 错误处理

  • fopen 返回 NULL 表示打开文件失败。
  • 检查文件操作状态:
    • feof(FILE *stream): 检查文件是否到达末尾。
    • ferror(FILE *stream): 检查文件操作是否发生错误。

4. 标准输入输出和错误流

  • stdin: 标准输入流
  • stdout: 标准输出流
  • stderr: 标准错误输出流

fopen:

FILE *fp = fopen("file.txt", "r");
if (fp == NULL) {perror("Error opening file");return -1;
}

 fgetsfputs

char buffer[100];
fgets(buffer, 100, fp); // 从文件中读取一行
fputs(buffer, stdout); // 将读取的内容输出到标准输出

fclose

fclose(fp); // 关闭文件

 

内存操作

  • memset: 用于将内存块的某一段设置为指定的值
    memset(buffer, 0, sizeof(buffer)); // 将buffer中的所有字节设置为0
    

    工具和文件操作

  • vim diff: 文本对比工具
  • stat: 查看文件的详细信息

 

打开文件

在C语言中,使用 fopen() 函数打开文件。该函数的原型为:

FILE *fopen(const char *filename, const char *mode);
  • 参数

    • filename:文件名或路径。
    • mode:文件打开模式(如 "r", "w", "a", "rb", "wb" 等)。
  • 常用模式

    • "r":以只读模式打开文件。文件必须存在。
    • "w":以写入模式打开文件。如果文件存在,其内容将被清空;如果文件不存在,将创建一个新文件。
    • "a":以追加模式打开文件。文件指针将定位到文件末尾。
    • "r+":以读写模式打开文件。文件必须存在。
    • "w+":以读写模式打开文件。如果文件存在,其内容将被清空;如果文件不存在,将创建一个新文件。
    • "a+":以读写模式打开文件。文件指针将定位到文件末尾。
      FILE *file = fopen("example.txt", "w");
      if (file == NULL) {perror("Error opening file");return 1;
      }
      
      关闭文件

      使用 fclose() 函数关闭文件。函数原型为:

      int fclose(FILE *stream);
      

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

 读取文件
  • fgetc():读取下一个字符。返回值为字符或 EOF

    int c = fgetc(file);
    

  • fgets():读取一行字符(最多读取 n-1 个字符),包括换行符。返回值为字符串指针或 NULL

    char buffer[100];
    if (fgets(buffer, sizeof(buffer), file) != NULL) {printf("%s", buffer);
    }
    

  • fread():读取二进制数据。函数原型为:

    size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
    
    • 参数
      • ptr:指向存储读取数据的内存地址。
      • size:每个数据项的大小。
      • count:要读取的数据项数目。
      • stream:文件流指针。
    • 示例
      size_t bytesRead = fread(buffer, 1, sizeof(buffer), file);
      

写入文件
  • fputc():写入一个字符。返回值为字符或 EOF

    fputc('A', file);
    

  • fputs():写入字符串。返回值为非负值(成功)或 EOF(失败)。

    fputs("Hello, World!", file);
    

  • fwrite():写入二进制数据。函数原型为:

    size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
    • 参数
      • ptr:指向要写入的数据的内存地址。
      • size:每个数据项的大小。
      • count:要写入的数据项数目。
      • stream:文件流指针。
    • 示例
       
size_t bytesWritten = fwrite(buffer, 1, sizeof(buffer), file);

笔记详解 

相关文章:

文件Io编程基础

1. 标准I/O (stdio.h) stdio.h 是标准C库的头文件,包含了输入输出函数的声明。位置:/usr/include/stdio.h 2. 文件I/O操作步骤 打开文件: 使用 fopen 函数,返回 FILE* 指针。读/写操作: 使用 fread、fwrite、fgets、fputs、fprintf、fscan…...

本地项目提交到Gitee

在项目目录 右键 git bash here 可以在黑屏输入命令 也可以在项目里面 命令都是一样的 要排除哪些 git add . 添加所有文件 git commit -m "Initial commit" 提交到本地 git remote add origin https://gitee.com/xxxx/xxxx.git 添加远程仓库 …...

有了谷歌账号在登录游戏或者新APP、新设备时,要求在手机上点击通知和数字,怎么办?

有的朋友可能遇到过,自己注册或购买了谷歌账号以后,在自己的手机上可以正常登录,也完成了相关的设置,看起来一切都很完美,可以愉快地玩耍了。 但是,随后要登录一个游戏的时候(或者登录一个新的…...

rsyslog如何配置日志轮转

以下是在 Linux 系统中配置 rsyslog 日志轮转策略的一般步骤: 编辑 rsyslog 的配置文件,通常为 /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf 。 在配置文件中添加类似以下的日志轮转配置示例: $template myLogs,"/var/log/mylog-%Y%m%d…...

LLM推理入门实践:基于 Hugging Face Transformers 和 Qwen2模型 进行文本问答

文章目录 1. HuggingFace模型下载2. 模型推理:文本问答 1. HuggingFace模型下载 模型在 HuggingFace 下载,如果下载速度太慢,可以在 HuggingFace镜像网站 或 ModelScope 进行下载。 使用HuggingFace的下载命令(需要先注册Huggin…...

python:YOLO格式数据集图片和标注信息查看器

作者:CSDN _养乐多_ 本文将介绍如何实现一个可视化图片和标签信息的查看器,代码使用python实现。点击下一张和上一张可以切换图片。 文章目录 一、脚本界面二、完整代码 一、脚本界面 界面如下图所示, 二、完整代码 使用代码时&#xff0…...

AGI思考探究的意义、价值与乐趣 Ⅴ

搞清楚模型对知识或模式的学习与迁移对于泛化意味什么,或者说两者间的本质?相信大家对泛化性作为大语言模型LLM的突出能力已经非常了解了 - 这也是当前LLM体现出令人惊叹的通用与涌现能力的基础前提,这里不再过多赘述,但仍希望大家…...

c++: mangle命名规则

其实可用根据binutils/c++filt的源代码看。找到mangle的命名规则, 但是从网上找到了一个总结,但是github有时候上不去,摘录再次。 https://github.com/gchatelet/gcc_cpp_mangling_documentation https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling 举例: _ZN8…...

系统化学习 H264视频编码(05)码流数据及相关概念解读

说明:我们参考黄金圈学习法(什么是黄金圈法则?->模型 黄金圈法则,本文使用:why-what)来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法,理论方面会更多地讲清楚 音视频中概念的…...

【VMware】如何演示使用U盘在VMware虚拟机上安装Windows11

一、前置准备 在开始使用U盘演示在VMware虚拟机上装Windows11前,我们需要做以下前置的准备: 已制作好的Windows引导盘;WMware软件 如何制作Windows引导盘? 推荐参考: 【建议收藏】2024年最新Windows系统重装教程&…...

HanLP和Jieba区别

HanLP和Jieba都是中文分词工具,但它们在多个方面存在区别。以下是对两者区别的详细分析: 一、开发背景与语言支持 HanLP:由大连理工大学自然语言处理与社会人文计算实验室开发,是一个开源的自然语言处理工具包。它主要使用Java语…...

荒原之梦考研:考研二战会很难吗?

考研二战是不是很难,其实很大程度上取决于我们自己,我们能否认清自己的优势,能否指定和执行合理的计划,有没有强大的心理支撑等,都是决定考研二战能否成功,或者能否比较轻松的成功的关键。 在本文中&#…...

【Git企业级开发实战指南①】Git安装、基本操作!

目录 一、Git是什么?1.1特点1.2功能1.3基本概念 二、Git安装2.1Ubuntu下安装2.2Centos下安装Git 三、Git基本操作3.1创建git本地仓库3.2配置Git3.3 工作区&暂存区&版本库3.4 实操案例3.4.1添加文件 3.5 修改文件3.6版本回退3.7查看历史操作日志3.7撤销修改3…...

Leetcode 3239. Minimum Number of Flips to Make Binary Grid Palindromic I

Leetcode 3239. Minimum Number of Flips to Make Binary Grid Palindromic I 1. 解题思路2. 代码实现 题目链接:3239. Minimum Number of Flips to Make Binary Grid Palindromic I 1. 解题思路 这一题思路上的话就是分别考察一下把所有行都变成回文所需要的fli…...

C++面试基础算法的简要介绍

C是一种广泛使用的编程语言,尤其在算法和数据结构的实现中占据重要地位。以下是对C基础算法的一些介绍,涵盖了排序、查找、搜索算法以及基本的遍历算法等方面。 排序算法 快速排序(Quick Sort) 快速排序是一种分而治之的排序算法…...

【Linux网络编程】套接字Socket(UDP)

网络编程基础概念: ip地址和端口号 ip地址是网络协议地址(4字节32位,形式:xxx.xxx.xxx.xxx xxx在范围[0, 255]内),是IP协议提供的一种统一的地址格式,每台主机的ip地址不同,一个…...

jvm方法返回相关指令ireturn,areturn,return等分析

正文 看图: 做的事情如下: 1:弹出当前的方法栈帧 2:获取上一个方法 3:从当前方法的操作数栈中获取执行结果,并推送到上一个方法的操作数栈中对应的伪代码: Override public void execute(Frame frame) {Thread thread frame.thread();Frame curren…...

宝塔部署springboot vue ruoyi前后端分离项目,分离lib、resources

1、“文件”中创建好相关项目目录,并将项目相关文件传到对应目录 例如:项目名称/ #项目总目录 api/ #存放jar项目的Java项目文件 manage/ #vue管理后端界面 …...

Python 基础教程:List(列表)的使用

《Python 基础教程:List(列表)的使用》 在 Python 中,列表是最基本的数据结构之一,它是一种有序的、可变的数据集合,可以包含任意类型的元素,包括数字、字符串、其他列表等。 1. 列表的创建 …...

kubebuilder常用标签

kubebuilder 标签是用于注解 Kubernetes CRD(Custom Resource Definition) 的标签,主要用于在 Operator SDK 和 Kubebuilder 框架中生成代码、验证规则以及自定义 CRD 的生成。以下是常用的 kubebuilder 标签: 1. 字段验证标签 …...

ROS2开发环境搭建避坑指南:Win11 + WSL2 + Ubuntu 22.04 从安装到测试的完整记录

ROS2开发环境搭建实战:Win11与WSL2深度适配指南 环境准备与系统调优 在Windows 11上搭建ROS2开发环境,选择WSL2作为Linux子系统是最佳实践方案。不同于传统虚拟机方案,WSL2提供了接近原生Linux的性能表现,同时完美集成Windows桌…...

AI命理推理实测:用专业数据集验证大模型命理能力

提到AI命理相关的评测,就不得不说之前看到的,我们团队最近也沿着这个方向做了针对性测试,不是网上那种随便给大模型发个prompt就喊“准到离谱”的营销玩法,而是用有标准答案的盲测来验证AI命理推理的真实水平。 我们的评测是怎么…...

化整为零、分而治之、异步编排:一文读懂现代并发的底层心法

LongAdder:化整为零,热点分散 在Java多线程编程中,‌原子变量(如AtomicLong)‌通过CAS操作实现线程安全的累加。然而,在高并发场景下,大量线程争抢同一原子变量会引发严重的‌缓存一致性问题‌。…...

AI辅助开发:描述需求,快马AI自动生成旅行商问题算法与可视化

最近在做一个旅行商问题(TSP)的算法项目,想试试用AI辅助开发能有多高效。结果发现InsCode(快马)平台的AI功能真的帮了大忙,整个过程特别顺畅。这里分享一下我的体验。 需求分析阶段 刚开始我只是简单描述了需求:"需要一个用模拟退火算…...

OpenClaw多语言支持:Qwen2.5-VL-7B跨语种图文处理技巧

OpenClaw多语言支持:Qwen2.5-VL-7B跨语种图文处理技巧 1. 为什么需要多语言图文处理 上周我收到一份混合了英文技术文档和中文注释的项目资料,需要整理成统一格式的双语对照版本。手动复制粘贴到翻译工具再调整排版,花了我整整三个小时。这…...

竞赛获奖保研加分测评:除了挑战杯,哪些垂直赛事含金量更高?

在 2026 年推免(保研)竞争进入白热化的背景下,工科学子的加分项已不仅仅是绩点的博弈,更是工程实战能力的短兵相接。随着教育部《关于加强新时代卓越工程师培养的指导意见》的深入实施,各大名校对人才的评价标准正从“…...

OpenClaw性能优化:千问3.5-9B模型加速30%的秘诀

OpenClaw性能优化:千问3.5-9B模型加速30%的秘诀 1. 为什么需要优化OpenClaw性能 第一次用OpenClaw执行自动化任务时,我遇到了一个尴尬的问题——点击"整理桌面文件"指令后,系统整整思考了15秒才开始移动第一个文件。这种延迟在简…...

YouTube视频一直转圈?加载卡顿原因分析与排查方法(2026)

在日常开发或使用在线视频平台时,常见一个问题:视频播放过程中出现持续加载、卡顿甚至无法播放的情况。这类问题并不一定由带宽不足引起,而往往与浏览器、网络链路以及设备性能等多方面因素有关。本文从技术角度出发,对视频加载流…...

从模电理论到商用落地,应届生必做的无线充项目,H 桥 / LC 谐振 + QI 协议全栈详解

很多初学嵌入式的同学、正在准备秋招的电子信息类应届生,都会遇到两个核心困境:一是模电学了 H 桥、LC 谐振,只会背公式做题,根本不知道怎么在真实产品里落地;二是学完单片机只会点灯,写的都是流水账代码&a…...

快马AI助力:十分钟用Python搭建免费股票行情网站原型

最近想验证一个股票行情网站的原型,但作为独立开发者,从零搭建前后端实在太耗时。尝试用PythonFlask快速实现,结合InsCode(快马)平台的AI辅助功能,居然十分钟就完成了基础框架。记录下关键实现思路: 数据获取层设计 选…...