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;
}