1.使用fread、fwrite实现图片拷贝
程序代码:
1 #include<myhead.h>2 int main(int argc, const char *argv[])3 {4 //判断传入文件个数5 if(argc!=3)6 {7 printf("input file error\n");8 printf("usage:./a.out srcfile destfile\n");9 return -1;10 }11 FILE *src=NULL;12 //以只读形式打开文件13 if((src=fopen(argv[1],"r"))==NULL)14 {15 perror("fopen error");16 return -1;17 }18 19 FILE *dest=NULL;20 //以只写形式打开文件21 if((dest=fopen(argv[2],"w"))==NULL)22 {23 perror("fopen error");24 return -1;25 }26 unsigned char *buf;27 //求出源文件大小28 fseek(src,0,SEEK_END);//光标从起始点到末端29 long lenth=ftell(src);//得到文件大小30 fseek(src,0,SEEK_SET);//光标回到起始点31 //申请存储源图像大小的内存32 buf=(char *)malloc(sizeof(char)*lenth);33 //从源文件读取34 fread(buf,sizeof(char),lenth,src);35 //将读取的数据写入目标文件中36 fwrite(buf,sizeof(char),lenth,dest);37 printf("success\n");38 //释放空间39 free(buf);buf=NULL;40 //关闭文件41 fclose(src);42 fclose(dest);43 return 0;44 }
运行结果:
2.使用read、write完成两个文件的拷贝
程序代码:
1 #include<myhead.h>2 int main(int argc, const char *argv[])3 {4 //判断终端文件个数5 if(argc!=3)6 {7 printf("input file error\n");8 printf("usage:./a.out srcfile destfile\n");9 return -1;10 }11 //定义文件描述符变量12 int src,dest;13 //以只读形式打开源文件14 if((src=open(argv[1],O_RDONLY))==-1)15 {16 perror("open error");17 return -1;18 }19 //读取源文件内容,写入目标文件20 char buf[128]="";//char类型最多12821 while(1)22 {23 //初始化数组24 memset(buf,0,sizeof(buf));25 //从源文件中读取数据26 int res=read(src,buf,sizeof(buf));27 //写入目标文件28 write(dest,buf,res);29 //判断读取的数据个数30 if(res==0)31 break;32 }33 //关闭文件34 close(src);35 close(dest);36 printf("success\n");37 return 0;38 }
运行结果:
3.将系统时间在文件中显示出来
程序代码:
1 #include<myhead.h>2 int file_line(FILE *fp);3 int main(int argc, const char *argv[])4 {5 //获取系统时间6 time_t oldtime,newtime;//相当于int m,n7 //秒数转换为时间结构体类型指针8 struct tm *t;9 char buf[128]="";//存储时间的字符串10 11 //定义文件指针,以追加形式打开12 FILE *fp=NULL;13 if((fp=fopen("./time.txt","a+"))==NULL)14 {15 perror("fopen error");16 return -1;17 }18 //获取文件行号19 int line=file_line(fp);20 //获取系统时间21 while(1)22 {23 time(&newtime);24 if(oldtime!=newtime)//更新时间25 {26 oldtime=newtime;27 //时间结构体信息28 t=localtime(&newtime);29 //时间转换为字符串30 //调用结构体31 sprintf(buf,"%d、%3d:%3d:%3d\n",line++,t->tm_hour,t->tm_min,t->tm_sec);32 //写入字符串33 fputs(buf,fp);34 fflush(fp);35 }36 }37 //关闭文件38 fclose(fp);39 return 0;40 }41 //定义获取行号函数42 int file_line(FILE *fp)43 {44 //读取文件内容45 char buf[10]="";46 int count=0;47 //循环读取48 while(1)49 {50 //定义一个指针指向读取的字符串51 char *res=fgets(buf,sizeof(buf),fp);52 if(res==NULL)//文件读取结束53 break;54 //判断最后一个字符是否为'\n'55 if(buf[strlen(buf)-1]=='\n')56 count++;57 }58 return count;59 }
运行结果:
流程图: