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

文件IO练习1

题目一:

1、使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入

实现代码:

#define LEN_BUF 256int main(int argc, const char *argv[])
{if(argc != 3){fprintf(stderr,"程序入参输入有误\n");return -1;}FILE *src=fopen(argv[1],"r");FILE *dest=fopen(argv[2],"w");if(src==NULL||dest==NULL){fprintf(stderr,"文件打开失败\n");return -1;}char buffer[LEN_BUF];size_t num;while((num=fread(buffer,sizeof(char),LEN_BUF,src))>0){//size_t num=fread(buffer,sizeof(char),LEN_BUF,src);fwrite(buffer,sizeof(char),num,dest);}fclose(src);fclose(dest);printf("文件拷贝完成\n");return 0;
}

运行效果:

ubuntu@ubuntu:~/99-Prac/1015$ ./a.out /etc/passwd passwd
文件拷贝完成
ubuntu@ubuntu:~/99-Prac/1015$ diff /etc/passwd passwd
ubuntu@ubuntu:~/99-Prac/1015$ cat /etc/passwd | wc -l
50
ubuntu@ubuntu:~/99-Prac/1015$ cat passwd | wc -l
50

题目二:

2、使用fgets获取当前文件的总行数

实现代码:

int main(int argc, const char *argv[])
{if(argc != 2){fprintf(stdout, "输入参数有误\n");return -1;}FILE *fp=fopen(argv[1],"r");if(fp == NULL){fprintf(stdout, "文件[%s]打开失败\n", argv[1]);return -1;}//使用fgets统计行数int cnt=0;char buffer[1024];while((fgets(buffer, sizeof(buffer), fp))!=NULL){int len=strlen(buffer);if(buffer[len-1] == '\n')cnt++;}fclose(fp);printf("文件[%s]一共有[%d]行\n", argv[1], cnt);return 0;
}

运行效果:

ubuntu@ubuntu:~/99-Prac/1015$ ./a.out passwd
文件[passwd]一共有[50]行
ubuntu@ubuntu:~/99-Prac/1015$ cat passwd | wc -l
50

题目三:

3、向文件中每一秒打印当前系统时间

实现代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>int main(int argc, const char *argv[])
{FILE *fp=fopen("time.log","w");if(fp == NULL){fprintf(stderr,"文件打开失败\n");return -1;}//每一秒中在终端打印下系统时间time_t curTime;time_t preTime=0;//记录上一次打印的时间int cnt=0;while(1){curTime=time(NULL);if((curTime-preTime)<1){//仍然在1秒以内continue;}	preTime=curTime;//打印struct tm* t=localtime(&curTime);	fprintf(fp,"行号[%03d] %4d-%02d-%02d %02d:%02d:%02d\n", ++cnt,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);fflush(fp);}fclose(fp);//虽然永远执行不到return 0;
}

运行效果:

ubuntu@ubuntu:~/99-Prac/1015$ tail -f time.log
行号[001] 2024-10-15 18:57:27
行号[002] 2024-10-15 18:57:28
行号[003] 2024-10-15 18:57:29
行号[004] 2024-10-15 18:57:30
行号[005] 2024-10-15 18:57:31
行号[006] 2024-10-15 18:57:32
行号[007] 2024-10-15 18:57:33
行号[008] 2024-10-15 18:57:34
行号[009] 2024-10-15 18:57:35
行号[010] 2024-10-15 18:57:36
行号[011] 2024-10-15 18:57:37
行号[012] 2024-10-15 18:57:38
行号[013] 2024-10-15 18:57:39
行号[014] 2024-10-15 18:57:40
行号[015] 2024-10-15 18:57:41
行号[016] 2024-10-15 18:57:42

http://www.lryc.cn/news/460369.html

相关文章:

  • c++ std::future 和 std::promise 的实现工作原理简介
  • MATLAB(Octave)混电动力能耗评估
  • opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用
  • HTML+CSS总结【量大管饱】
  • Android开发之Broadcast Receive(广播机制)其实开发如此简单
  • Chromium 中chrome.cookies扩展接口c++实现分析
  • excel筛选多个单元格内容
  • Instant 和 Duration 类(进行时间处理)
  • Java每日面试题(Spring)(day19)
  • 【多线程】线程池(上)
  • ansible 语句+jinjia2+roles
  • 【Docker项目实战】使用Docker部署HumHub社交网络平台
  • “医者仁术”再进化,AI让乳腺癌筛查迎难而上
  • 安卓流式布局实现记录
  • -bash gcc command not found解决方案(CentOS操作系统)
  • (二)Python输入输出函数
  • 从调用NCCL到深入NCCL源码
  • 深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec
  • 优选算法第一讲:双指针模块
  • 智能优化算法-水循环优化算法(WCA)(附源码)
  • 基于SpringBoot的个性化健康建议平台
  • Mapsui绘制WKT的示例
  • Modbus TCP 西门子PLC指令以太口地址配置以及 Poll Slave调试软件地址配置
  • MySQL表的基本查询上
  • MySQL中什么情况下类型转换会导致索引失效
  • 数据治理的意义
  • 快手游戏服务端C++开发一面-面经总结
  • git的学习使用(认识工作区,暂存区,版本区。添加文件的方法)
  • Series数据去重
  • Python语言核心12个必知语法细节