1.创建一个 time.txt记录时间2.使用文件 IO 拷贝一张图片3.用标准 IO 拷贝一张图片
1.创建一个time.txt记录时间
要求创建一个
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
通过time.h中的函数与结构体得到时间,使用getc获得已有的行数,再通过fprintf将时间输出到指定的函数中。其中需要注意sleep函数与fprintf函数共同使用的问题,若未使用fflush(fp)将缓存区释放,程序将不断延时导致无法正常输出。
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
long int line(FILE *fp)
{
int m=0;
char c;
c=fgetc(fp);
while(c!=-1)
{
if (c==10)
{
m++;
}
c=fgetc(fp);
}
return m;
}//通过getc求行数
int main(int argc, const char *argv[])
{
time_t t;
struct tm* info=NULL;
FILE*fp =fopen("./time.txt","a+");
printf("time start\n");
long int i=0;
i=line(fp);
while(1)
{
t=time(NULL);
info=localtime(&t); //将秒通过loacltime函数转化成tm*类型的info
fprintf(fp,"[%ld] %d-%02d-%02d %02d:%02d:%02d\n",++i ,\
info->tm_year+1900, info->tm_mon+1, info->tm_mday,\
info->tm_hour, info->tm_min, info->tm_sec);//使用LINE输出输出次数
fflush(fp);
sleep(1);
}
fclose(fp);
return 0;
}
编写完成测试结果如下:
通过ctrl强制停止函数运行后查看txt中的内容并重复操作,可见功能实现成功。
1. 要求文件IO拷贝一张图片
通过文IO中的write与read函数将图片分字节拷贝至新文件处。
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main(int argc, const char *argv[])
{
//只读文件
int fd_r = open("./pic.png", O_RDONLY);
if(fd_r < 0)
{
return -1;
}
//以写的方式打开目标文件
int fd_w = open("./eog4.png", O_WRONLY|O_CREAT|O_TRUNC, 0664);
if(fd_w < 0)
{
return -1;
}
char buf[10];
ssize_t res = 0;
while(1)
{
bzero(buf, sizeof(buf));
res = read(fd_r, buf, sizeof(buf));
if(0 == res)
break;
write(fd_w, buf, res); //因为res返回值为取得字节数所以填入res
} //将图像分10字节拷贝
close(fd_r);
close(fd_w);
return 0;
}
结果如下:
拷贝成功
3.用标准IO拷贝一张图片
原理与文件IO的拷贝类似,通过fread与fwrite分字节拷贝至新的文件中
#include <stdio.h>
int main(int argc, const char *argv[])
{
int m,i;
FILE*fp=fopen("./pic.png","r");
FILE*fq=fopen("./eog5.png","w");
if (NULL==fp)
{
perror("fopen");
return -1;
}
char c[1]="";
while(fread(c,1,1,fp)>0)
{
fwrite(c,1,1,fq);
}
fclose(fq);
fclose(fp);
return 0;
}
实现结果如下
将新的图像命名位eog5.png与之前的图像进行区分
可见最后文件夹中存在三张图片。