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

文件IO练习1

题目一:

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

实现代码:

#define LEN_BUF 256

int 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.kler.cn/a/348798.html

相关文章:

  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day1
  • ansible 流程控制
  • 自然语言处理 (NLP) 的 5 个步骤
  • less和sass基本使用
  • 交易所开发:构建安全、高效、可靠的数字资产交易平台
  • Modbus学习笔记
  • 电脑电源要如何检测?
  • 国内外顶级的产品经理,他们都具备哪些能力?
  • neo4j部署保姆级教程
  • 雷池社区版配置遇到问题不要慌,查看本文解决
  • 天通智能平板|智能移动终端|三防|单兵|平板|智能三防手持终端
  • 在vue3中实现祖组件给后代组件传参,可以跨域几层。
  • 游戏服务端架构演进
  • 文件完整性监控:如何提高企业的数据安全性
  • centos7 Oracle 11g rac 静默安装(NFS配置共享存储)
  • Django一分钟:DRF生成OpenAPI接口文档
  • 金融衍生品中的风险对冲策略分析
  • 气动紧急切断阀安装说明
  • linux下查询网卡光纤模块sn序列号
  • <Linux> 信号量