2022/7/28——IO函数的练习

本文档展示了两个C语言程序示例。第一个程序使用文件IO函数创建并更新一个名为`time.txt`的文件,记录每秒钟的时间戳,并在程序重启后继续追加。第二个程序演示如何通过文件描述符进行图片文件的复制。这两个示例涵盖了文件打开、读写、关闭以及数据传输等基本操作。
摘要由CSDN通过智能技术生成

今天学习了文件IO函数的使用

函数名功能函数名功能
open打开文件,获取文件描述符close关闭文件,释放文件描述符
write将数据写入到文件中read将数据从文件中读取出来

1、要求创建一个time.txt,存储内容格式如下:

[1] 2022-07-28 17:15:06

[2] 2022-07-28 17:15:07

[3] 2022-07-28 17:15:08

ctrl + c退出程序,过一会儿之后重新启动程序

[1] 2022-07-28 17:15:06

[2] 2022-07-28 17:15:07

[3] 2022-07-28 17:15:08 <-------------------

[4] 2022-07-28 17:16:31

[5] 2022-07-28 17:16:32

所用的功能函数——统计行数

//获取行数函数——返回值为文件目前的行数
int file_count_line(FILE *stream)
{
	int count=0;
	int c=fgetc(stream);
	while(c != EOF)
	{
		if(c=='\n')
		{
			count++;
		}
		c=fgetc(stream);
	}
	return count;
}

主函数

int main(int argc, const char *argv[])
{
	//以可读可写的追加方式打开文件
	FILE *fp=fopen("time.txt","a+");
	if(NULL==fp)
	{
		perror("fopen");
		return -1;
	}
	//调用函数获取当前文件的行数
	int line=file_count_line(fp);
	time_t t;             //存放总秒数
	struct tm *info=NULL;  //存放转换后的时间
	while(1)
	{
		t = time(NULL);
		info=localtime(&t);
		line++;               //让行数发生变化
		fprintf(fp,"[%d] %d-%02d-%02d %02d:%02d:%02d\n",\
				line,info->tm_year+1900,info->tm_mon+1,info->tm_mday,\
				info->tm_hour,info->tm_min,info->tm_sec);
		fflush(fp);
		sleep(1);
	}
	//关闭文件
	if(fclose(fp)<0)
	{
		perror("fclose");
		return -1;
	}
	return 0;
}

运行结果

[1] 2022-07-28 19:52:48
[2] 2022-07-28 19:52:49
[3] 2022-07-28 19:52:50
[4] 2022-07-28 19:52:51
[5] 2022-07-28 19:52:52
[6] 2022-07-28 19:52:53
[7] 2022-07-28 19:53:06
[8] 2022-07-28 19:53:07
[9] 2022-07-28 19:53:08
[10] 2022-07-28 19:53:09
[11] 2022-07-28 19:53:10
[12] 2022-07-28 19:53:11
[13] 2022-07-28 19:53:12
[14] 2022-07-28 19:53:13
[15] 2022-07-28 19:53:14

 

2、拷贝图片(文件IO)

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
int main(int argc, const char *argv[])
{
	//以只读方式打开原图片
	int fd = open("./1.jpg",O_RDONLY);
	//以可写的方式创建一个目标图片
	int fd2 = open("./test.jpg",O_WRONLY|O_CREAT|O_TRUNC,0755);
	if(fd <0)
	{
		fprintf(stderr,"%d处文件打开失败\n",__LINE__);
		perror("open");
		return -1;
	}
	if(fd2<0)
	{
		fprintf(stderr,"%d处文件打开失败\n",__LINE__);
		perror("open");
		return -1;
	}
	
	char str[20]="";   //存放读取出的数据
	ssize_t res = 0;   //存放读取的数量
	while(1)
	{
		bzero(str,sizeof(str));
		res = read(fd,str,sizeof(str));
		if(0==res)
		{
			break;
		}
		write(fd2,str,res);    //写入的时候不要将越界了数据写入到文件中,所以使用res
	}
	//关闭文件
	close(fd);
	close(fd2);
	return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命如星火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值