IO进程线程复习

标准IO:

1.打开文件

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//定义文件指针
	FILE *fp=NULL;
	//以只读的形式打开文件
	//fp=fopen("./text.txt","r");
	//以只写的形式打开文件
	fp=fopen("./time.c","w");
	if(fp==NULL)
	{
		perror("fopen error");
		return -1;
	}
	printf("文件打开成功\n");

	//关闭文件
	fclose(fp);
	return 0;
}

2.单字符读写

#include<myhead.h>

int main(int argc, const char *argv[])
{
	FILE *fp=NULL;
	//以只写的形式打开文件
	fp=fopen("./test.txt","w");
	if(fp==NULL)
	{
		perror("fopen error");
		return -1;
	}

	//向文件中写入数据
	fputc('W',fp);
	fputc('e',fp);
	fputc('l',fp);
	fputc('c',fp);
	fputc('o',fp);
	fputc('m',fp);
	fputc('e',fp);

	//关闭文件
	fclose(fp);

	//以只读的形式再次打开文件
	fp=fopen("./test.txt","r");
	if(fp==NULL)
	{
		perror("fopen error");
		return -1;
	}
	
	while(1)
	{
		char ch=fgetc(fp);//从fp指向的文件中读取一个字符
		if(ch==EOF)//读取到文件结束了
		{
			break;
		}
		printf("%c ",ch);
	}
	printf("\n");
	//关闭文件
	fclose(fp);
	return 0;
}

3.使用fgetc统计给定文件行数。

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//判断外部传参是否合法
	if(argc!=2)
	{
		printf("input file error\n");
		printf("usage:./a.out filename\n");
	}
	//定义文件指针
	FILE *fp=NULL;
	//以只读的形式打开文件
	fp=fopen(argv[1],"r");
	if(fp==NULL)
	{
		perror("fopen error");
		return -1;
	}
	
	//统计行号
	int line=0;
	char ch=0;//遍历文件的字符
	while(1)
	{
		//循环从文件中读取一个字符,知道读取结束为止
		char ch=fgetc(fp);
		if(ch==EOF)
		{
			break;
		}

		//判断获取的字符是否为‘\n’
		if(ch=='\n')
		{
			line++;
		}
	}
	printf("一共有%d行\n",line);

	//关闭文件
	fclose(fp);

	return 0;
}

4.使用fgetc和fput完成两个文件拷贝。

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//判断外部传参是否合法
	if(argc!=3)
	{
		printf("input file error\n");
		printf("usage:./a.out srcfile destfile\n");
	}
	//定义文件指针
	FILE *srcfp=NULL;
	FILE *destfp=NULL;
	//以只读的形式打开源文件
	srcfp=fopen(argv[1],"r");
	if(srcfp==NULL)
	{
		perror("fopen srcfile error");
		return -1;
	}
	//以只写的形式打开目标文件
	destfp=fopen(argv[2],"w");
	if(destfp==NULL)
	{
		perror("fopen destfile error");
		return -1;
	}
	
	char ch=0;//遍历文件的字符
	while(1)
	{
		//循环从文件中读取一个字符,知道读取结束为止
		char ch=fgetc(srcfp);
		if(ch==EOF)
		{
			break;
		}
		//将读取的数据放入到目标文件中
		fputc(ch,destfp);
	}

	//关闭文件
	fclose(srcfp);
	fclose(destfp);

	return 0;
}

5.字符串读写

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//定义文件指针,以只写的形式打开文件
	FILE *fp=NULL;
	if((fp=fopen("./02test.txt","w"))==NULL)
	{
		perror("fopen error");
		return -1;
	}

	//向文件中写入字符串
	fputs("hello\n",fp);
	fputs("world\n",fp);

	//关闭文件
	fclose(fp);

	//以只读的形式再次打开文件
	if((fp=fopen("./02test.txt","r"))==NULL)
	{
		perror("fopen error");
		return -1;
	}

	char buf[5];//字符串的搬运工
	while(1)
	{
		char *p=fgets(buf,sizeof(buf),fp);//从fp中读取字符串到buf中
		if(p==NULL)
		{
			break;
		}
		printf("buf=%s\n",buf);
	}
	//关闭文件
	fclose(fp);


	return 0;
}

6.格式化读写

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//以只写的形式打开文件
	FILE *fp=NULL;
	if((fp=fopen("./03test.txt","w"))==NULL)
	{
		perror("fopen error");
		return -1;
	}

	//定义要写入的数据
	int numb=1000;
	char name[]="zhangzhiren";
	int age=30;
	fprintf(fp,"%d %s %d\n",numb,name,age);

	//关闭文件
	fclose(fp);


	//使用fscanf从终端读取数据
	int value;
	fscanf(stdin,"%d",&value);
	printf("value=%d\n",value);

	return 0;
}

7.新读写函数取代旧读写函数

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//单字符读写操作
	char ch=0;
	ch=fgetc(stdin);//ch=getchar();
	fputc(ch,stdout);//putchar(ch);
	fgetc(stdin);//getchar();
	printf("\n************\n");

	//字符串读写操作
	char str[128]="";
	fgets(str,sizeof(str),stdin);//gets(str);
	fputs(str,stdout);//puts(str);
	printf("\n************\n");

	//格式化读写操作
	int num=0;
	fscanf(stdin,"%d",&num);//scanf("%d",&num);
	fprintf(stdout,"num=%d\n",num);//printf("num=%d\n",num);

	return 0;
}

8.验证缓冲区大小

#include<myhead.h>

int main(int argc, const char *argv[])
{
	printf("%ld\n",stdout->_IO_buf_end - stdout->_IO_buf_base);//1024
	printf("%ld\n",stdout->_IO_buf_end - stdout->_IO_buf_base);//1024

	getchar();//stdin
	printf("%ld\n",stdin->_IO_buf_end - stdin->_IO_buf_base);//1024

	//验证全缓存大小
	FILE *fp=NULL;
	if((fp=fopen("./04test.txt","w"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	fprintf(fp,"hello");
	printf("%ld\n",fp->_IO_buf_end - fp->_IO_buf_base);//4096
	fclose(fp);

	//验证不缓存大小
	perror("result");
	printf("%ld\n",stderr->_IO_buf_end - stderr->_IO_buf_base);//0
	return 0;
}

9.行缓存的刷新时机

#include<myhead.h>

int main(int argc, const char *argv[])
{
	/*
	//1.缓冲区刷新时机未到,不会展示在终端上
	printf("hello world");
	while(1);//阻塞
	*/
/*
	//2.遇到‘\n’会刷新行缓存
	printf("hello world\n");
	while(1);//阻塞
	*/
/*
	//3.文件结束后,会刷新行缓存
	printf("hello world");
	*/
/*
	//4.当关闭文件指针后,会刷新行缓存
	printf("hello world");
	fclose(stdout);//关闭文件指针
	while(1);
*/	
/*
	//5.使用fflush刷新缓冲区后,会刷新行缓存
	printf("hello world");
	fflush(stdout);
	while(1);
	*/
/*
	//6.当输入输出发生切换时,会刷新行缓存
	int num;
	printf("请输入num的值:");
	scanf("%d",&num);
	*/

	//7.当缓冲区满了后,会刷新缓冲区
	for(int i=0;i<1025;i++)
	{
		printf("A");
	}
	while(1);
	
	return 0;
}

10.全缓存的刷新时机

#include<myhead.h>

int main(int argc, const char *argv[])
{
	FILE *fp=NULL;
	if((fp=fopen("./06test.txt","w+"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	/*
	//1.缓冲区刷新时机未到,不会展示在终端上
	fprintf(fp,"hello world");
	while(1);//阻塞
	*/

	//2.遇到‘\n’不会刷新全缓存
	fprintf(fp,"hello world\n");
	while(1);//阻塞
	
/*
	//3.文件结束后,会刷新全缓存
	fprintf(fp,"hello world");
	*/
/*
	//4.当关闭文件指针后,会刷新全缓存
	fprintf(fp,"hello world");
	fclose(fp);//关闭文件指针
	while(1);
*/	
/*
	//5.使用fflush刷新缓冲区后,会刷新全缓存
	fprintf(fp,"hello world");
	fflush(fp);
	while(1);
	*/
/*
	//6.当输入输出发生切换时,会刷新全缓存
	int num;
	fprintf(fp,"请输入num的值:");
	fgetc(fp);
	*/
/*
	//7.当缓冲区满了后,会刷新缓冲区
	for(int i=0;i<4097;i++)
	{
		fprintf(fp,"A");
	}
	while(1);
*/	
	return 0;
}

11.不缓存的刷新时机:只要有数据,直接被刷新

#include<myhead.h>

int main(int argc, const char *argv[])
{
	fprintf(stderr,"A");//向标准出错中写入数据
	while(1);
	return 0;
}

12.获取系统当前时间

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//1.获取时间的秒数
	time_t sysTime=time(NULL);

	//2.通过秒数获取时间结构体指针
	struct tm *t=localtime(&sysTime);

	//3.将时间打印在终端上
	//printf("%4d-%2d-%2d %2d:%2d:%2d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);

	//将时间的格式串存储到一个数组中
	char time_buf[128]="";
	snprintf(time_buf,sizeof(time_buf),"%4d-%2d-%2d %2d:%2d:%2d\n",t->tm_year+1900,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
	
	printf("time_buf=%s\n",time_buf);
	return 0;
}

13.使用fgets统计给定文件行数

#include<myhead.h>

int main(int argc, const char *argv[])
{
	//判断外部传参
	if(argc!=2)
	{
		printf("input file error\n");
		printf("usage:./a.out filename\n");
		return -1;
	}
	//定义文件指针,以只读形式打开文件
	FILE *fp=NULL;
	if((fp=fopen(argv[1],"r"))==NULL)
	{
		perror("fopen error");
		return -1;
	}
	//统计行数
	int line=0;
	char buf[5]="";
	while(1)
	{
		char *p=fgets(buf,sizeof(buf),fp);
		if(p==NULL)
			break;
		//判断最后一个字符为'\n'
		if(buf[strlen(buf)-1]=='\n')
			line++;
	}
	//输出行数
	printf("一共%d行\n",line);

	//关闭文件
	fclose(fp);
	return 0;
}

14.使用fputs和fgets完成两个文件拷贝

15.完成注册登录功能,做个小菜单

功能1:注册功能,输入注册账号和登录密码,将账号和密码写入文件中。

功能2:登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配,则提示登录失败。

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

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

相关文章

蓝桥杯:真题讲解2(C++版)附带解析

星系炸弹 来自&#xff1a;2015年六届省赛大学B组真题&#xff08;共6道题) 分析&#xff1a;这题涉及到平年和闰年的知识&#xff0c;如果我们要解这题&#xff0c;首先要知道每月有多少天&#xff0c;其实也就是看2月份的天数&#xff0c;其它月份的天数都是一样的&#xff…

飞行机器人专栏(十三)-- 智能优化算法之粒子群优化算法与多目标优化

一、理论基础 1.1 引言 粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;自1995年由Eberhart和Kennedy提出以来&#xff0c;已经成为解决优化问题的一种有效且广泛应用的方法。作为一种进化计算技术&#xff0c;PSO受到社会行为模式&#xff0c;特别是…

金南瓜SECS/GEM如何添加工程?

公开资料皆为是2、3年前版本 编译SecsEquip.dll依赖库 ① 打开示例程序中的SecsEquip项目 ② 选中SecsEquip工程&#xff0c;右键选择属性 如果没有“解决方案资源管理器”页面&#xff0c;可以从菜单的“视图”->“解决方案资源管理器”打开 ③ 选择跟设备相同的NET版本…

2月24日(周六)比赛前瞻:曼联 VS 富勒姆、拜仁 VS 莱比锡

大家好&#xff0c;博主将持续更新胜负14场前瞻&#xff0c;此处每日赛事间歇更新&#xff0c;胃信号每日更新。 精选赛事&#xff1a;曼联 VS 富勒姆 曼联近期状态显著提升&#xff0c;上一轮联赛客场2-1战胜卢顿&#xff0c;连续7场正赛取得6胜1平的成绩&#xff0c;保持不败…

基于JAVA的二手车交易系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

K8S-001-Virtual box - Network Config

A. 配置两个IP&#xff0c; 一个连接内网&#xff0c;一个链接外网: 1. 内网配置(Host only&#xff0c; 不同的 virutal box 的版本可以不一样&#xff0c;这些窗口可能在不同的地方&#xff0c;但是配置的内容是一样的): 静态IP 动态IP 2. 外网&#xff08;创建一个 Networ…

六、回归与聚类算法 - 模型保存与加载

目录 1、API 2、案例 欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、API 2、案例

__proto__和protype的区别

概述&#xff1a; prototype 函数静态属性&#xff0c;非实例属性,所有实例都可以继承它 __proto__ 实例属性&#xff0c;指向实例的原型对象&#xff0c;原型对象包括构造函数和protype属性 替代 现代浏览器中可以使用Object.getPrototypeOf()来替代__proto__来获取原型对象 …

EasyRecovery2024永久免费版手机数据恢复软件功能全面介绍

一、功能概述 EasyRecovery手机数据恢复软件是一款专为移动设备设计的数据恢复工具。它能够有效地从智能手机、平板电脑等移动设备中恢复因各种原因丢失的数据&#xff0c;包括但不限于误删除、格式化、系统崩溃、病毒感染等。 EasyRecovery-mac最新版本下载:https://wm.maked…

红日靶场3

靶场链接&#xff1a;漏洞详情 在虚拟机的网络编辑器中添加两个仅主机网卡 信息搜集 端口扫描 外网机处于网端192.168.1.0/24中&#xff0c;扫描外网IP端口&#xff0c;开放了80 22 3306端口 80端口http服务&#xff0c;可以尝试登录网页 3306端口mysql服务&#xff0c;可…

Java最全面试总结——6.Springboot篇

1、为什么要用SpringBoot Spring Boot 优点非常多&#xff0c;如&#xff1a; 一、独立运行 Spring Boot而且内嵌了各种servlet容器&#xff0c;Tomcat、Jetty等&#xff0c;现在不再需要打成war包部署到容器 中&#xff0c;Spring Boot只要打成一个可执行的jar包就能独立运行…

MATLAB:数组与矩阵

2.1 数组运算 数组运算时MATLAB计算的基础。由于MATLAB面向对象的特性&#xff0c;这种数值数组称为MATLAN最重要的一种内建数据类型&#xff0c;而数组运算就是定义这种数据结果的方法。 2.1.1 数组的创建和操作 在MATLAB中一般使用方括号“[]”、逗号“,”、空格和分号“;…

常见的10种算法

数据结构 研究的内容&#xff1a;就是如何按一定的逻辑结构&#xff0c;把数据组织起来&#xff0c;并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。 算法 研究的目的&#xff1a;是为了更有效的处理数据&#xff0c;提高数据运算效率。数据的运算是定…

mysql-MVCC

一、基础概念 1. MVCC的含义 MVCC (Multiversion Concurrency Control)&#xff0c;即多版本并发控制技术&#xff0c;它是通过读取某个时间点的快照数据&#xff0c; 来降低并发事务冲突而引起的锁等待&#xff0c; 从而提高并发性能的一种机制. MVCC 的实现,是通过保存数据…

Redis高性能原理

redis大家都知道拥有很高的性能&#xff0c;每秒可以支持上万个请求&#xff0c;这里探讨下它高性能的原理。单线程架构和io多路复用技术。 一&#xff0c;单线程架构 单线程架构指的是命令执行核心线程是单线程的&#xff0c;数据持久化、同步、异步删除是其他线程在跑的。re…

【实战篇】Redis单线程架构的优势与不足

前言 01 Redis中的多线程02 I/O多线程03 Redis中的多进程问题 04 结论 很多人都遇到过这么一道面试题&#xff1a;Redis是单线程还是多线程&#xff1f;这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程&#xff0c;说复杂是因为这个答案其实并不准确。 难道R…

K8S部署Java项目 pod报错 logs日志内容:no main manifest attribute, in app.jar

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

2001~2023年中国MOD17A3HGF NPP数据

各位同学们好&#xff0c;今天和大伙儿分享的是2001~2023年中国MOD17A3HGF NPP数据。如果大家有下载处理数据等方面的问题&#xff0c;请私信或评论。 Running, S., M. Zhao. <i>MODIS/Terra Net Primary Production Gap-Filled Yearly L4 Global 500m SIN Grid V061<…

PCIe P2P DMA全景解读

温馨提醒&#xff1a;本文主要分为5个部分&#xff0c;总计4842字&#xff0c;需要时间较长&#xff0c;建议先收藏&#xff01; P2P DMA简介 P2P DMA软硬件支持 CXL P2P DMA原理差异 P2P DMA应用场景 P2P DMA技术挑战 一、P2P DMA简介 P2P DMA&#xff08;Peer-to-Peer…

【常见工具】深度学习环境安装vncserver

Ubuntu VNC 安装/使用/故障解决 看这一篇就够了 1.xstartup #!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS /etc/X11/xinit/xinitrc # Assume either Gnome or KDE will be started by default when installed # We want to kill the session automaticall…