vim fopen.c 在终端创建一个fopen.c文件并打开
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main(int argc,char *argv[]) //main函数原型
4 {
5 if(argc < 3)
6 {
7 printf("too few argment\n");
8 }
9 char *dstfile = argv[2];
10 char *srcfile = argv[1];
11 FILE *srcFile = fopen(srcfile,"r+");//r+:Create an empty file and open it for update (both for input and output). If a file with the same name already exists its contents are discarded and the file is treated as a new empty file.创建一个空文件
12 //创建源文件指针
13 if(srcFile == NULL) //判断源文件是否存在
14 {
15 printf("srcFile open failed!\n");
16 exit(-1); //异常退出 exit(0)表示正常退出
17 }
18 //创建目的文件指针
19 FILE *dstFile = fopen(dstfile,"w+");//w+表示写方式: Open a file for update (both for input and output). The file must exist. 打开一个文件,并且该文件必须存在
20 if(dstFile == NULL)
21 {
22 printf("dstFile open failed!\n");
23 exit(-1);
24 }
25 char buffer[10000];
26 //创建一个数组,用于接收字符串
27 for(;;)
28 {
29 size_t readlen = 0;
30 readlen = fread(buffer,1,sizeof(buffer),srcFile);
31 //1代表从srcFile源文件按1字节1字节读
32 if(readlen == 0) //判断文件是否读到末尾
33 {
34 break;
35 //退出循环
36 }
37 size_t writelen = 0;
38 while(writelen < readlen)
39 {
40 writelen += fwrite(buffer + writelen,1,(readlen - writelen),dstFile); //1字节1字节写入dstFile文件,buffer + writelen表示从上一次处接着写
41 }
42
43 }
44 fclose(srcFile);
45 fclose(dstFile); //最后要把文件关闭,不然会出现难以预料的错误
46 return 0;
47 }
在终端编译运行:gcc fopen.c表示编译该文件,然后会生成一个.o 文件。然后再运行,struct.c是已经存在的源文件,而struct.c.new是目的文件.
然后vim -O struct.c struct.c.new 在终端使用双页显示查看是否拷贝成功,你会发现文件里的内容按字节拷贝过去了。左边是源文件,右边是目的文件