文件IO(二)

文件IO(二)

  • 标准IO
    • 缓冲类型
      • 全缓冲
      • 行缓冲
      • 不缓冲
    • 打开文件
      • fopen
    • 操作文件
      • 按字符读写(fgetc fputc)
      • 按行读写(fgets fputs)
      • 按块(对象)读写(fread fwrite)
      • 按格式化读写(fscanf fprintf)
      • 关闭文件(fclose)
    • 相关的函数
      • 强制刷新缓冲区(fflush)
      • 判断文件是否到末尾(feof)
      • 获取本地时间(time)
      • 光标跳转(fseek、ftell)

标准IO

标准IO:
1.标准IO由ANSI C标准定义, 库函数提供的
2.跨平台性,移植性较好
3.有缓冲区的操作,标准IO的效率比文件IO的效率高
4.一般以文件流指针作为操作依据

缓冲类型

全缓冲

缓冲区满了,或者强制刷新缓冲区
在这里插入图片描述

行缓冲

缓冲区满了,碰到换行符或者强制刷新缓冲区
在这里插入图片描述

不缓冲

缓冲区的数据及时的出来了
在这里插入图片描述

打开文件

fopen

#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
函数功能:以mode表示的形式打开pathname表示的文件的路径
函数参数:pathname 表示被打开的文件的路径
mode 打开文件的方式


r 以只读的形式打开文件,光标置于开头
r+ 以可读可写的形式打开文件,光标置于开头
w 以只写的形式打开文件,文件存在清空打开,文件不存在新建,光标置于开头
w+ 以可读可写的形式打开文件,文件存在清空打开,文件不存在新建,光标置于开头
a 以追加的形式打开文件(写在末尾),文件不存在则新建,光标置于文件末尾
a+ 以可读并追加的形式打开文件,文件不存在则新建,光标置于文件末尾
函数返回值:指针,成功返回打开的文件的流指针,失败返回NULL,并更新errno

在这里插入图片描述

操作文件

按字符读写(fgetc fputc)

#include <stdio.h>
int fgetc(FILE *stream);
函数功能:读stream指示的文件,成功返回读到的数据(无符号的char强转成的int),失败或者读完了返回EOF(-1)
int fputc(int c, FILE *stream);
函数功能:将c转换成无符号的char数据,写入到文件stream里

实现cat命令
在这里插入图片描述
实现cp命令
在这里插入图片描述

按行读写(fgets fputs)

#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
函数功能:从stream指示的流中读取size-1个字符给s指示的空间
最后一个字符给\0预留
函数返回值:成功返回s的地址,失败返回NULL
int fputs(const char *s, FILE *stream);
函数功能:王stream指示的文件流中写入s指示的数据,写到\0为止
函数返回值:成功返回成功写入的大小,失败返回-1

实现:统计一个文件中有多少行

在这里插入图片描述
在这里插入图片描述

按块(对象)读写(fread fwrite)

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能:从stream指示的文件中读nmemb个数据,每一个数据有size个大小,到ptr指示的空间中
函数返回值:成功返回成功读到的个数,失败返回0
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能:往stream里面写nmemb个数据,每一个数据有size个大小,数据从ptr来的
函数返回值:成功返回成功写入的个数,失败返回0

案例,通过fwrite保存数据,另外一个程序通过fread读取数据
myhead.h

#ifndef _MYHEAD_H_
#define _MYHEAD_H_
#include <stdio.h>
typedef struct student
{
	char name[20];
	char id[20];
	int age;
}Stu;
#endif

mywri.c

#include "myhead.h"
int main(int argc, const char *argv[])
{
	FILE *pw = NULL;
	//打开文件
	pw = fopen("msg.txt", "w");
	if(!pw)
	{
		perror("open");
		return -1;
	}
	//操作文件
	//1.给数据赋值
	Stu stu1 = {"xiaoming", "yan24020202", 24};
	//写数据,内存stu1 --> 文件pw
	//fwrite(ptr, size, nmemb, stream);
	fwrite(&stu1, sizeof(Stu), 1, pw);
	//关闭文件
	fclose(pw);
	return 0;
}

myred.c

#include "myhead.h"
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	FILE *pr = NULL;
	//申请一片空间
	Stu *ptr = (Stu *)malloc(sizeof(Stu));
	//清空
	memset(ptr, 0, sizeof(Stu));
	//打开文件
	pr = fopen("msg.txt", "r");
	if(!pr)
	{
		perror("open");
		return -1;
	}
	//操作文件
	//将数据,从pr中读到内存上来使用
	//fread(ptr, size, nmemb, stream);
	fread(ptr, sizeof(Stu), 1, pr);
	printf("name : %s \n", ptr->name);
	printf("id : %s \n", ptr->id);
	printf("age : %d \n", ptr->age);
	//关闭文件
	fclose(pr);
	return 0;
}

按格式化读写(fscanf fprintf)

#include <stdio.h>
int fprintf(FILE *stream, const char *format, …);
函数功能:往指定的文件中输出信息,用法和printf一样
int fscanf(FILE *stream, const char *format, …);
函数功能:从指定的文件中读取数据,用法和scanf一样

关闭文件(fclose)

#include <stdio.h>
int fclose(FILE *stream);
函数功能:关闭stream指示的流

相关的函数

强制刷新缓冲区(fflush)

#include <stdio.h>
int fflush(FILE *stream);

判断文件是否到末尾(feof)

#include <stdio.h>
int feof(FILE *stream);

获取本地时间(time)

#include <time.h>
time_t time(time_t *tloc);
函数功能:获取本机时间(以秒数存储,从1970年1月1日0:0:0开始到现在)
返回值:获得的秒数,如果形参非空,返回值也可以通过传址调用的形式返回

在这里插入图片描述

#include <time.h>
struct tm *localtime(const time_t timep);
函数功能:将timep(时间戳变量)转成认识的结果,将结果封装成struct tm类型的结构体
返回值:返回struct tm类型的结构体指针
struct tm {
int tm_sec; / Seconds (0-60) /
int tm_min; /
Minutes (0-59) /
int tm_hour; /
Hours (0-23) /
int tm_mday; /
Day of the month (1-31) /
int tm_mon; /
Month (0-11) /
int tm_year; /
Year - 1900 /
int tm_wday; /
Day of the week (0-6, Sunday = 0) /
int tm_yday; /
Day in the year (0-365, 1 Jan = 0) /
int tm_isdst; /
Daylight saving time */
};

在这里插入图片描述

光标跳转(fseek、ftell)

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
函数功能:跳转光标
函数参数1:待跳转光标的文件
函数参数2:光标的偏移量
函数参数3:从哪里开始偏移
SEEK_SET, 从文件开头
SEEK_CUR, 从当前位置
SEEK_END, 从文件末尾
返回值:成功返回0,失败返回-1并更新errno
long ftell(FILE *stream);
函数功能:返回stream文件的光标的位置

案例:获取一个文件有多大

1.打开文件
2.光标跳转到末尾 (SEEK_END 0 )
3.返回当前光标的位置

在这里插入图片描述
案例:制作一个空洞文件
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CALayer-时钟练习-旋转 Objective-C语言】

一、好,接下来呢,我们要让它旋转出来, 1.让它先旋转起来啊,这根秒针,让它先转着, 把之前的代码复制粘贴一份,改个名字,叫:07-时钟练习(旋转) 旋转的话,我现在应该让它,一秒钟,旋转一次,一秒钟,旋转一次, 那么,这个时候,我们应该怎么样去做, 我现在这个是…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的执行隔离

安全之安全(security)博客目录导读 目录 一、执行隔离 1、安全状态 2、安全模型 本博客探讨 RME 所需的系统能力&#xff0c;以保证 Arm CCA 对于 Realms 的安全性和隔离特性。 一、执行隔离 1、安全状态 RME 系统支持以下安全状态&#xff1a; 非安全 (Non-secure)安全…

nodejs版本管理切换工具nvm介绍、nvm下载、nvm安装、配置及nvm使用

最近很多同学问&#xff0c;在工作中&#xff0c;同时在进行2个或者多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版本的NodeJS运行环境&#xff0c;这种情况下&#xff0c;对于维护多个版本的node将会是一件非常麻烦的事情&#xff…

使用screw-core生成数据库结构说明文档

官方项目地址&#xff1a; screw: 简洁好用的数据库表结构文档工具&#xff0c;支持MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB 数据库。 数据库支持 MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB&#xff08;2016&#xff09; H2 &#xff08;开发…

倍福TwinCAT3 PLC编程软件下载安装

1、哪里下载TwinCAT3 链接: Search result | 倍福 中国https://www.beckhoff.com.cn/zh-cn/support/download-finder/search-result/?download_group=97028248下载倍福PLC编程软件需要注册,大家可以提前注册,注册好后就可以开始愉快的下载了 安装前需要注意将各杀毒软件卸…

Red Hat Enterprise Linux (RHEL) 8.10 发布 - 红帽企业 Linux 8 完美终结版

Red Hat Enterprise Linux (RHEL) 8.10 (x86_64, aarch64) - 红帽企业 Linux 红帽企业 Linux 8 完美终结版 请访问原文链接&#xff1a;Red Hat Enterprise Linux (RHEL) 8.10 (x86_64, aarch64) - 红帽企业 Linux&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处…

n后问题 回溯笔记

问题描述 在nn格的棋盘上放置彼此不受攻击的n个皇后。 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同 一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同一行或同一列或同一斜线上。 代码 import java.uti…

橙派探险记:开箱香橙派 AIpro 与疲劳驾驶检测的奇幻之旅

目录 引子&#xff1a;神秘包裹的到来 第一章&#xff1a;香橙派AIpro初体验 资源与性能介绍 系统烧录 Linux 镜像&#xff08;TF 卡&#xff09; 调试模式 登录模式 第二章&#xff1a;大胆的项目构想 系统架构设计 香橙派 AIpro 在项目中的重要作用 第三章&#xf…

windows 安装 使用 nginx

windows 安装 使用 nginx nginx官网下载地址&#xff1a;https://nginx.org/en/download.html 下载稳定版本即可 下载压缩包解压到即可 进入文件夹中&#xff0c;打开命令行窗口&#xff0c;执行启动命令 start nginx.exe验证&#xff08;默认是80端口&#xff09;&#x…

new CCDIKSolver( OOI.kira, iks ); // 创建逆运动学求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某个特定的库或框架来创建一个逆运动学&#xff08;Inverse Kinematics, IK&#xff09;求解器实例。逆运动学在机器人学、动画和计算机图形学等领域中非常重要&#xff0c;它用于根据期望的末端执行器&#xff08;如机器人的…

【ai】livekit:Agents 1 : Agents Framework 与 LiveKit 核心 API 原语

agents 官方文档LiveKit Agents LiveKit Agents is an end-to-end framework for building realtime, multimodal AI “agents” that interact with end-users through voice, video, and data channels. This framework allows you to build an agent using Python.是一个端到…

SQL面试题练习 —— 连续支付订单合并

目录 1 题目2 建表语句3 题解 1 题目 现有一张用户支付表&#xff1a;t_user_pay 包含字段订单ID&#xff0c;用户ID&#xff0c;商户ID&#xff0c;支付时间&#xff0c;支付金额。 如果同一用户在同一商户存在多笔订单&#xff0c;且中间该用户没有其他商户的支付记录&#…

C语言 指针——指针变量做函数参数

目录 指针变量的解引用 为什么要用指针变量做函数参数&#xff1f; 演示Call by value 指针变量的解引用 为什么要用指针变量做函数参数&#xff1f; 演示Call by value

Tomcat启动过程

ClassLoader初始化 发生在org.apache.catalina.startup.Bootstrap#init() Catalina初始化 1、加载Digester工具 发生在org.apache.catalina.startup.Catalina#load() 2、容器启动&#xff0c;启用StandardContext维持Socket连接 Digester工具初始化 发生在org.apache.catali…

1比1万地形图符号库分享

我们在《1:2.5万、1:5万、1:10万军用地形图图式》一文中&#xff0c;为大家分享过军用地形图式。 还在《超实用三调符号库分享下载》一文中&#xff0c;为大家分享过三调符号库。 现在再为你分享一个&#xff11;比&#xff11;万的地形图符号库&#xff0c;请在文末查看符号…

浏览器修改后端返回值

模拟接口响应和网页内容 通过本地覆盖可以模拟接口返回值和响应头&#xff0c;无需 mock 数据工具&#xff0c;比如&#xff08;Requestly&#xff09;&#xff0c;无需等待后端支持&#xff0c;快速复现在一些数据下的 BUG 等。在 DevTools 可以直接修改你想要的 Fetch/XHR 接…

nvidia orin nx 刷机JETPACK 6

条件&#xff1a; 1.sdkmanager 链接&#xff1a;https://pan.baidu.com/s/1pmeT7_vKF_NXvP8xEhCelw?pwd8q1e 提取码&#xff1a;8q1e 2.ubuntu 20或者ubuntu22 3.nvidia orin nx Nvidia Jetson Orin NX&#xff08;一&#xff09;开始刷机_jetson nx刷机-CSDN博客 …

四象限桌面怎么制作 结合桌面便签更高效

在繁忙的工作中&#xff0c;我们经常面临各种任务和项目的挑战&#xff0c;如何高效地管理这些任务成为提升工作效率的关键。这时候&#xff0c;四象限时间管理法就显得尤为重要。 四象限&#xff0c;即将工作按照紧急与重要程度分为四类&#xff1a;紧急且重要、紧急不重要、…

spring分析工具_springboot startup analyze的部署和使用

工具是开源工具 ,可以放心使用 我是从开源中国OCSChina看到的顺便安利一下 部署 教程 https://github.com/linyimin0812/spring-startup-analyzer 直接下载地址 https://github.com/linyimin0812/spring-startup-analyzer/releases/download/v3.0.0/spring-startup-analyzer.…

快团团供货大团长如何打印电子面单?

一、功能说明 快团团打单平台是目前唯一一个服务于快团团团长的打单发货工具&#xff0c;免费提供给团长使用。可帮助团长快速打印面单、分拣包裹、完成发货。 目前快团团打单平台已支持大批量打印快递单、自定义快递面单、自动发货、绑定拼多多电子面单账号等功能&#xff0c…