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);//1024printf("%ld\n",stdout->_IO_buf_end - stdout->_IO_buf_base);//1024getchar();//stdinprintf("%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);//4096fclose(fp);//验证不缓存大小perror("result");printf("%ld\n",stderr->_IO_buf_end - stderr->_IO_buf_base);//0return 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:登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配,则提示登录失败。

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

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

相关文章

PyTorch:transforms.Normalize()函数详解

PyTorch&#xff1a;transforms.Normalize()函数详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅和…

华清远见作业第四十二天——Qt(第四天)

思维导图&#xff1a; 编程&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTextToSpeech> //语音播报类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public Q…

How to implement multiple file uploads based on Swagger 3.x in Spring boot 3.x

How to implement multiple file uploads based on Swagger 3.x in Spring boot 3.x Projectpom.xmlOpenAPIConfigFileUploadControllerapplication.yaml Project pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

STM32物联网(封装AT指令进行TCP连接及数据的接收和发送)

文章目录 前言一、AT指令函数封装1.向ESP8266发送数据函数2.设置ESP8266工作模式3.连接WIFI函数4.查询IP地址5.连接TCP服务器6.发送数据到TCP服务器7.接收并解析来自TCP服务器的数据8.关闭TCP服务器 二、代码测试总结 前言 本篇文章将继续带大家学习STM32物联网&#xff0c;那…

音视频剪辑|Windows|抽帧和合帧

什么是抽帧&#xff1f; FFmpeg 抽帧&#xff08;Extracting frames&#xff09;的作用是从视频文件中按需提取单张或多张静止图像&#xff08;帧&#xff09;&#xff0c;并将它们保存为图片文件&#xff08;如 JPEG、PNG 等格式&#xff09;。这一功能在以下场合十分有用&am…

Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例

概述 Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议&#xff0c;在Qt也被Qt封装成了自己的库供我们调用&#xff0c;对于需要进行网络交互的项目中无疑是很重要的&#xff0c;希望这篇文章可以帮助到大家。 考虑到可能有点小伙伴可能不知道Tcp和Udp的一些概念&#x…

Django学习笔记-HTML实现服务器图片的下载

1.index编写代码,跳转下载页面 2.创建download界面 3.编写download路由 4.创建download函数 1).如果请求的方法是GET&#xff0c;imglist变量存储从models.imgModel模型中获取的所有对象,创建字典ctx,使用render函数来渲染download.htm 2).如果请求的方法是POST,获取要下载的文…

Java 基于微信小程序的农产品自主供销小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

123 Linux C++ 系统编程2 Linux 上安装卸载程序三种方法,linux 下解压缩命令 tar介绍。kill命令,top命令,umask 命令

一 通过命令和网络直接安装 sudo apt-get update sudo apt-get update 的工作就是将自己本地 ubutun的软件列表和 aliyun 的软件列表对比&#xff0c;如不一样&#xff0c;则更新。 sudo apt-get install 软件名 真正的安装 那么这里就有一个问题了&#xff0c; 怎么从aliy…

C/C++内存管理学习【new】

文章目录 一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型四、operator new与operator delete函数五、new和delete的实现原理5.1 内置类型 六、定位new表达式(pl…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的无人机目标检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文详细介绍了一种利用深度学习技术的无人机目标检测系统&#xff0c;该系统基于前沿的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等先前版本进行了性能对比。本系统能够在不同媒介如单一图像、视频文件、实时视频流及批量处理文件中准确地检测和识别…

Redis信创平替之TongRDS(东方通),麒麟系统安装步骤

我的系统: 银河麒麟桌面系统V10(SP1)兆芯版 1.先进入东方通申请使用 2.客服会发送一个TongRDS包与center.lic给你(我这里只拿到.tar.gz文件,没有网上的什么安装版) 3.上传全部文件到目录中 4.服务节点安装,并启动 tar -zxvf TongRDS-2.2.1.2_P3.Node.tar.gz cd pmemdb/bin/…