1> 写一个日志文件,将程序启动后,每一秒的时间写入到文件中
1、2024- 7-29 10:31:19
2、2024- 7-29 10:31:20
3、2024- 7-29 10:31:21 ctrl+c:停止程序 ./a.out
4、2024- 7-29 10:35:06
5、2024- 7-29 10:35:07
6、2024- 7-29 10:35:08
main.c
#include <myhead.h>
int main(int argc, const char *argv[])
{
FILE *fp = NULL;
if ((fp = fopen("./time.txt", "a+")) == NULL)
{
perror("fopen error");
return -1;
}
char bufold[30] = " "; //用来存放第一次取出的时间
char bufnew[30] = " "; //用来存放第二次取出的时间
char buf[128] = " "; //存放fgets取出的数组
int line = 0; //记录行号
while (fgets(buf, sizeof(buf), fp)) //在数据写入前统计文件中一共有几行
{
line++;
}
line++;
while (1)
{
//第一次读取时间
time_t sys_time = time(NULL);
struct tm *time_ptr = localtime(&sys_time);
//将第一次读取的时间存放在bufold中
sprintf(bufold, "%d %4d-%d-%d %2d:%2d:%2d\n", line,
time_ptr->tm_year + 1900,
time_ptr->tm_mon + 1,
time_ptr->tm_mday,
time_ptr->tm_hour,
time_ptr->tm_min,
time_ptr->tm_sec);
printf("bufnew = %s\n", bufold);
while (1)
{
//取出要比较的时间
time_t sys_time = time(NULL);
struct tm *time_ptr = localtime(&sys_time);
//将要比较的时间放入bufnew中
sprintf(bufnew, "%d %4d-%d-%d %2d:%2d:%2d\n", line,
time_ptr->tm_year + 1900,
time_ptr->tm_mon + 1,
time_ptr->tm_mday,
time_ptr->tm_hour,
time_ptr->tm_min,
time_ptr->tm_sec);
//比较两个时间是否不同,如果不同表示时间过了一秒,把时间写入到文本中
if ((strcmp(bufold, bufnew)) != 0)
{
line++;
fwrite(bufnew, 1, strlen(bufnew), fp);
break;
}
//刷新缓冲区
fflush(fp);
}
}
fclose(fp);
return 0;
}
2> 使用fread、fwrite完成两个文件的拷贝不允许只读写一次
#include<myhead.h>
int main(int argc, const char *argv[])
{
FILE *src = NULL;
if((src = fopen("./time.txt","r"))==NULL)//把src当成要复制的文件地址
{
perror("fopen error");
return -1;
}
FILE *dest = NULL;
if((dest = fopen("./zy2.txt","w"))==NULL)//把src当成被复制的文件地址
{
perror("fopen error");
return -1;
}
char n;
while(fread(&n,1,sizeof(n),src))//每次从src指向的文件中读取sizeof(n)项大小的一个项放入到n中,直到文件读取结束
{
fwrite(&n,1,sizeof(n),dest);//将读取到的n写入发哦dest指向的文件中
}
fclose(src);
fclose(dest);
return 0;
}
3> 实现对bmp图像的读写操作
#include<myhead.h>
int main(int argc, const char *argv[])
{
//定义文件指针
FILE *fp = NULL;
if((fp = fopen("./gg.bmp", "r+")) == NULL)
{
perror("fopen error");
return -1;
}
//获取文件大小
int img_size = 0;
//将文件光标偏移2个字节
fseek(fp, 2, SEEK_SET);
//读取4字节的内容
fread(&img_size, sizeof(img_size), 1, fp);
printf("size = %d\n", img_size); //图像大小
//从头向后偏移54字节后,就是图像数据
fseek(fp, 54, SEEK_SET);
//定义一个像素
unsigned char color[3] = {0, 0, 255}; //正红色
for(int i=0; i<960/2; i++) //外行
{
for(int j=0;j<1280; j++) //内列
{
fwrite(color, sizeof(color), 1, fp);
}
}
//关闭文件
fclose(fp);
return 0;
}
4> 君子作业:给图像打马赛克
#include<myhead.h>
int main(int argc, const char *argv[])
{
//定义文件指针
FILE *fp = NULL;
if((fp = fopen("./gg(复件).bmp", "r+")) == NULL)
{
perror("fopen error");
return -1;
}
//获取文件大小
int img_size = 0;
//将文件光标偏移2个字节
fseek(fp, 2, SEEK_SET);
//读取4字节的内容
fread(&img_size, sizeof(img_size), 1, fp);
printf("size = %d\n", img_size); //图像大小
//从头向后偏移54字节后,就是图像数据
fseek(fp, 54, SEEK_SET);
//定义一个像素
unsigned char color[3] = " "; //正红色
for(int i=0; i<960; i++) //外行
{
for(int j=0;j<1280; j++) //内列
{
fread(color,sizeof(color),1,fp);
for (int k =0; k < 20; k++)
{
for ( int m = 0; m < 20; m++)
{
fwrite(color, sizeof(color), 1, fp);
}
j++;
}
}
}
//关闭文件
fclose(fp);
return 0;
}