文件IO和标准IO的实际运用

question1

在这里插入图片描述

代码实现

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	FILE *FP=fopen("time.txt","a+");
	size_t t;
	int count=0;
	while(1)
	{
	time(&t);//获取到秒数
	struct tm *lt=NULL;
	lt=localtime(&t);
	if(NULL==FP)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	char c;
	for(c=fgetc(FP);c!=EOF;c=fgetc(FP))//循环取内容,直到取到文件结尾
	{
		if(c == '\n')
		{
			count++;//每进行换行,记录次数
		}
	}
	fprintf(FP,"[%d] %d-%02d-%02d %d:%d:%d\n",count++,lt->tm_year+1900,lt->tm_mon+1,lt->tm_mday,lt->tm_hour,lt->tm_min,lt->tm_sec);
	fflush(FP);
	sleep(1);
	}
	fclose(FP);
	return 0;
}

运行结果

在这里插入图片描述

要求文件IO拷贝一张图片;

代码实现

#include<stdio.h> 
#include<sys/types.h> 
#include<stdlib.h> 
#include<sys/stat.h> 
#include<string.h> 
#include<unistd.h> 
#include<fcntl.h>
int read_cp(char arr[],int lenth,int fp,int ep)
{
	umask(0);
	if(-1==fp)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	int res;
	while(1)
	{
		bzero(arr,sizeof(arr));
		if((res=read(fp,arr,sizeof(arr)-1))==0)
		break;	
		write(ep,arr,res);

		//printf("%d\t%d\n",strlen(arr),res);
		//sleep(1);
	}
	return 0;
}
int main(int argc, const char *argv[])
{
	char arr[20];
	int fp=open(argv[1],O_RDONLY);
	int ep=open(argv[2],O_RDWR|O_APPEND|O_CREAT|O_TRUNC,0777);
	read_cp(arr,sizeof(arr),fp,ep);
	
	return 0;
}

运行结果

在这里插入图片描述

附加:用标准IO拷贝一张图片

代码实现

#include<stdio.h> 
#include<sys/types.h> 
#include<stdlib.h> 
#include<sys/stat.h> 
#include<string.h> 
#include<unistd.h> 
#include<fcntl.h>
int fread_cp(char *arr,int lenth,FILE*fp,FILE*ep)
{
	if(NULL==fp)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	size_t res;
	while(1)
	{
		bzero(arr,sizeof(arr));
		if((res=fread(arr,1,19,fp))==0)
		break;	
		fwrite(arr,1,res,ep);

	//	printf("%d\t%d\n",strlen(arr),res);
	//	sleep(1);
	}
	return 0;
}
int main(int argc, const char *argv[])
{
	char arr[20];
	FILE *fp=fopen(argv[1],"r");
	FILE *ep=fopen(argv[2],"w+");
	fread_cp(arr,sizeof(arr),fp,ep);
	
	return 0;
}

运行结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值