C实例No.12|文件复制、循环记录时间

文件复制

通过对文件进行复制,掌握流的基本操作。在程序中分别打开源文件和目标文件,然后循环从源文件中读取内容并且写入到目标文件里。(注意:不宜死循环太久)
案例是把1.txt内容循环复制到2.txt里

./mycopy 1.txt 2.txt

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

流程:
检查参数 -> 打开源文件 -> 打开目标文件 -> 循环读写文件 -> 关闭文件

代码

#include <stdio.h>
#include <errno.h>
#include <string.h>

#define N 64

int main(int argc, char *argv[])
{
	int n;
	char buf[N];
	FILE *fps, *fpd;

	if(argc < 3)
	{
		printf("Usage: %s <src_file> <dst_file>\n",argv[0]);
		return -1;
	}

	if((fps = fopen(argv[1], "r")) == NULL)
	{
		fprintf(stderr, "Failed to open %s : %s\n", argv[1], strerror(errno));
		return -1;
	}

	if((fpd = fopen(argv[2], "w")) == NULL)
	{
		fprintf(stderr, "Failed to fopen %s : %s\n", argv[2], strerror(errno));
		fclose(fps);
		return -1;
	}

	while((n = fread(buf, 1, N, fps)) >= 0)
	{
		fwrite(buf, 1, N, fpd);
	}

	fclose(fps);

	fclose(fpd);

	return 0;
}

循环记录时间

程序每隔一秒读取一次系统时间并显示出时间。
在这里插入图片描述

流程:
打开文件->获取系统时间->格式化显示时间->延时1s->返回获取系统时间的第二部(循环下去)

  1. 获取系统时间
  2. 在程序中实现延时
  3. 流的格式化输出

代码

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>

#define N 64

int main(int argc, char *argv[])
{
	int n;
	char buf[N];
	FILE *fp;
	time_t t;

	struct tm* t_s=NULL;

	if(argc < 2)
	{
		printf("Usage: %s <file>\n", argv[0]);
		return -1;
	}

	if((fp = fopen(argv[1], "w")) == NULL)
	{
		perror("failed to fopen");
		return -1;
	}

	while(1)
	{
		//t = time(&t);
		//fprintf(fp, "%s\n", ctime(&t));
		//fwrite(buf, 1, N, fp);
		t = time(NULL);
		t_s=localtime(&t);
		fprintf(fp,"%d %d %d %d %d %d\n",t_s->tm_year+1900,t_s->tm_mon+1,t_s->tm_mday,t_s->tm_hour,t_s->tm_min,t_s->tm_sec);
		fprintf(stdout,"%d %d %d %d %d %d\n",t_s->tm_year+1900,t_s->tm_mon+1,t_s->tm_mday,t_s->tm_hour,t_s->tm_min,t_s->tm_sec);
		sleep(1);//延时1s

	}

	fclose(fp);

	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值