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类型最多128
21 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,n
7 //秒数转换为时间结构体类型指针
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 }
运行结果:
流程图: