1>使用fgets完成统计文件行号
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 FILE *fp = NULL;
10 //以只读的方式打开文件
11 if((fp = fopen("./01fopen.c","r")) == NULL){
12 perror("fopen error");
13 return -1;
14 }
15 //定义容器和计数器
16 char str[128] = "";
17 int count = 0;
18 //str从fp指向的地址获取信息
19 //当字符为\n时,计数器自增
20 while(fgets(str,sizeof(str),fp) != NULL){
21 if(str[strlen(str)-1] == '\n'){ //当遇到缓存区满或者'\n'时会刷新,加一个判断
22 count++;
23 }
24 }
25 //输出计数器的值
26 printf("文件共%d行\n",count);
27
28 //关闭文件
29 fclose(fp);
30
31
32 return 0;
33 }
34
35
2>使用fgets、fputs实现两个文件拷贝
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义两个文件指针
9 FILE *fpsrc = NULL;
10 FILE *fpdest = NULL;
11 //只读方式打开源文件
12 if((fpsrc = fopen("./01fopen.c","r")) == NULL){
13 perror("fopensrc error");
14 return -1;
15 }
16 //只写方式打开目标文件
17 if((fpdest = fopen("./11test.c","w")) == NULL){
18 perror("fopendest error");
19 return -1;
20 }
21 //定义一个容器
22 char str[128];
23 //使str从源文件中获取内容
24 //将str中内容放入目标文件
25 while(NULL != fgets(str,sizeof(str),fpsrc)){
26 fputs(str,fpdest);
27 }
28 //关闭文件指针
29 fclose(fpsrc);
30 fclose(fpdest);
31 //只读方式打开目标文件
32 if((fpdest = fopen("./11test.c","r")) == NULL){
33 perror("fopendest error");
34 return -1;
35 }
36 puts("copy success");
37
38 return 0;
39 }
40
41
3>向文件中输出时间,并且是每一秒更新一次,按ctrl+c停止输出后,下次再运行./a.out会继续向文件中接着输出
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 int main(int argc, const char *argv[])
9 {
10
11
12
13 //定义一个容器,临时容器,行数
14 char str[128] = " ";
15 int temp = -1;
16 int line = 0;
17
18 //定义文件指针,以追加的方式打开
19 FILE *fp = NULL;
20 if((fp = fopen("./12test.txt","a+")) == NULL){
21 perror("fopen error");
22 return -1;
23 }
24 //当重新打开文件,计算行数,line自增
25 while(fgets(str,sizeof(str),fp) != NULL){
26 if(str[strlen(str)-1] == '\n'){
27 line++;
28 }
29 }
30
31 time_t T = 0;
32 struct tm *t = NULL;
33 //当时间不相等时,将容器内的值输入到文件
34 while(1){
35
36 //定义时间指针
37 //获取当前的秒数
38 T = time(NULL);
39
40 //将秒转换为标准时间
41 t = localtime(&T);
42
43 //将标准时间放入输出
44 if(temp != t->tm_sec){
45 fprintf(fp,"%d:%4d-%02d-%02d %02d:%02d:%02d\n",++line,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
46 temp = t->tm_sec;
47 printf("%d:%4d-%02d-%02d %02d:%02d:%02d\n",line,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
48 fflush(fp);
49 }
50 }
51 //关闭文件指针
52 fclose(fp);
53
54
55
56 return 0;
57 }
58
59
4>使用fread、fwrite完成两个文件的拷贝
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义两个文件指针
9 FILE *fpsrc = NULL;
10 FILE *fpdest = NULL;
11
12 //以只读方式打开源文件
13 if((fpsrc = fopen("./01fopen.c","r")) == NULL){
14 perror("src fopen error");
15 return -1;
16 }
17
18 //以只写方式打开目标文件
19 if((fpdest = fopen("./13test.txt","w")) == NULL){
20 perror("dest fopen error");
21 return -1;
22 }
23
24 char temp[1024] = "";
25 int k = 0;
26 //将源文件写入目标文件
27 while((k = fread(temp,1,sizeof(temp),fpsrc)) != 0){
28 fwrite(temp,1,k,fpdest);
29 }
30 puts("copy success");
31
32 //关闭文件指针
33 fclose(fpsrc);
34 fclose(fpdest);
35
36 return 0;
37 }
38
39
1.fopen
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 FILE *fp = NULL;
10
11 //打开文件,将地址赋值给文件指针fp,根据fp指向是否为空判断是否打开成功
12 if((fp = fopen("./01test.c","w")) == NULL){
13 perror("fopen error"); //如打开失败,将错误码信息通过perror输出
14 return -1;
15 }else{
16 printf("success\n"); //如打开成功,输出success
17 }
18 fclose(fp); //关闭文件指针
19 return 0;
20 }
21
22
2.fclose
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 FILE *fp = NULL;
10
11 //用fp接fopen的返回值,通过判断fp的指向是否为NULL判断文件是否打开
12 if((fp = fopen("./01test.c","r")) == NULL){ //只读形式打开
13 perror("fopen error"); //如果打开失败,将错误码信息perror输出
14 return -1;
15 }else{
16 puts("open success");
17 }
18
19 //关闭指针
20 //通过判断fclose的返回值判断fp指针是否关闭成功
21 if(fclose(fp) != 0){
22 puts("fclose failed");
23 }else{
24 puts("fclose success");
25 }
26
27 return 0;
28 }
29
30
3.errno
1 #include
2 #include
3 #include
4 #include //错误码所在的头文件
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //创建文件指针
9 FILE *fp = NULL;
10
11 //判断是否创建成功
12 if((fp = fopen("./02test.c","r")) == NULL){ //只读的方式打开一个不存在的文件
13
14 strerror(errno); //方式1 ,将错误码信息转换位字符串
15 printf("%s\n",strerror(errno)); //输出字符串
16
17 perror("fopen error"); //方式2,通过perror直接将错误码输出,相当于上面两个函数
18 return -1;
19 }
20
21 //关闭文件指针
22 fclose(fp);
23 return 0;
24 }
25
26
4.fputc
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 // 定义文件指针
9 FILE *fp = NULL;
10 //判断文件是否按只写的方式打开
11 if((fp = fopen("./01test.c","w")) == NULL){
12 perror("fopen error");
13 return -1;
14 }
15
16 //将字符通过fputc写入fp所指向的文件中
17 fputc('H',fp);
18 fputc('e',fp);
19 fputc('l',fp);
20 fputc('l',fp);
21 fputc('o',fp);
22 fputc('\n',fp);
23
24 //关闭文件
25 fclose(fp);
26
27
28 return 0;
29 }
30
31
5.fgetc
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 FILE *fp = NULL;
10
11 //判断文件是否成功按只读的方式打开成功
12 //如果不成功输出错误码所对应的信息
13 if((fp = fopen("./01test.c","r")) == NULL){
14 perror("fopen error");
15 return -1;
16 }
17
18 //定义容器接收fgetc的返回值
19 //当不等于EOF时输出到屏幕
20 //当等于EOF时,说明已经到了文件结尾
21 char ch = '\0';
22 while((ch = fgetc(fp)) != EOF){
23 printf("%c ",ch);
24 }
25
26 //关闭文件指针
27 fclose(fp);
28
29 return 0;
30 }
31
32
6.行数
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 // argc 执行文件时,传入文件的个数
9 // argv 文件数组
10 // 判断文件是否为2
11 if(2 != argc){
12 puts("input file error");
13 puts("usage: ./a.out fileName");
14 return -1;
15 }
16
17 //定义文件指针
18 FILE *fp = NULL;
19
20 //以只读的形式打开文件
21 // argv[1]是文件数组,不需要加 “”
22 if((fp = fopen(argv[1],"r")) == NULL){
23 perror("fopen error");
24 return -1;
25 }
26
27 //定义容器和计数器记录读取的值
28 //当读取到目标字符时,计数器自增
29 //输出计数器的值,就是目标字符的个数
30 int count = 0;
31 char ch = '\0';
32 while((ch = fgetc(fp)) != EOF){
33 if(ch == '\n'){
34 count ++;
35 }
36 }
37 printf("一共%d行\n",count);
38
39 //关闭文件指针
40 fclose(fp);
41 return 0;
42 }
43
44
7.copy
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //判断文件个数是否为3
9 if(3 != argc){
10 puts("input file error");
11 puts("usage: ./a.out Src_fileName dst_fileName");
12 return -1;
13 }
14
15 //定义两个文件指针指向两个文件
16 FILE *fpsrc = NULL;
17 FILE *fpdst = NULL;
18
19 //判断第一个文件是否以只读的方式打开
20 if((fpsrc = fopen(argv[1],"r")) == NULL){
21 perror("fopen Src_fileName error");
22 return -1;
23 }
24 //判断第二个文件是否以只写的方式打开
25 if((fpdst = fopen(argv[2],"w")) == NULL){
26 perror("fopen dst_fileName error");
27 return -1;
28 }
29 //定义容器
30 char ch = '\0';
31 //循环从源文件中读取数据
32 //循还将数据放入到目标文件
33 while((ch = fgetc(fpsrc)) != EOF){
34 fputc(ch,fpdst);
35 }
36 //关闭文件指针
37 fclose(fpsrc);
38 fclose(fpdst);
39
40 puts("copy success");
41 return 0;
42 }
43
44
8.fputs
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 FILE *fp = NULL;
10 //以只写的方式打开一个文件
11 if((fp = fopen("./03test.c","w")) == NULL){
12 perror("fopen error");
13 return -1;
14 }
15 //将字符串输出到文件
16 fputs("hello world1\n",fp);
17 fputs("hello world2\n",fp);
18 fputs("hello world3\n",fp);
19
20 //关闭文件指针
21 fclose(fp);
22
23 return 0;
24 }
25
26
9.fgets
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 char s[128];
9
10 //从标准输入文件中读取数据到s中
11 fgets(s,sizeof(s),stdin);
12
13 //如果最后一个字符是'\n',将最后一个'\n' 转换成'\0'
14 if((s[strlen(s)-1]) == '\n'){
15 s[strlen(s)-1] = '\0';
16 }
17 printf("s = %s\n",s);
18
19 return 0;
20 }
21
10.缓冲区
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //验证行缓存大小为1024字节
9 //如果没有使用缓存区,那么其大小为0
10 printf("row = %ld\n",stdin->_IO_buf_end - stdin->_IO_buf_base);
11 //使用标准输入指针
12 char s[128];
13 fgets(s,sizeof(s)-1,stdin);
14 printf("s = %s",s);
15 //使用缓存区后,大小为1024
16 printf("row = %ld\n",stdin->_IO_buf_end - stdin->_IO_buf_base);
17
18 //验证全缓存大小为4096字节
19 FILE *fp = NULL;
20 if((fp = fopen("./10test.c","w")) == NULL){
21 perror("fopen error");
22 return -1;
23 }
24 fputs("Hello world",fp);
25 printf("all = %ld\n",fp->_IO_buf_end - fp->_IO_buf_base);
26
27 fclose(fp);
28
29 //验证不缓存大小为0
30 //输出为1是为指针占位
31 fputs("error\n",stderr); //向标准出错中输入数据
32 printf("no = %ld\n",stderr->_IO_buf_end - stderr-> _IO_buf_base);
33
34
35 return 0;
36 }
37
38
11.fflush
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //不刷新时机
9 //0.当缓存区没有刷新时机是,不会刷新缓存区
10 //printf("hello");
11 //while(1);
12
13 //刷新实际
14 //1.遇到换行符
15 //printf("hello world\n");
16 //while(1);
17
18 //2.程序结束
19 //printf("hello");
20
21 //3.关闭文件指针
22 //printf("hello");
23 //fclose(stdout); //手动关闭标准输出文件指针
24 //while(1); //此时程序并没有结束,需要ctrl+c终止
25
26 //4.fflush函数
27 //printf("hello");
28 //fflush(stdout);
29 //while(1);
30
31 //5.缓存区满
32 //int i = 0;
33 //for(i = 0; i < 1500; i++){
34 // printf("A ");
35 //}
36 //while(1);
37
38
39 //6.输入输出切换
40 //int num = 0;
41 //printf("please enter a number");
42 //scanf("%d",&num);
43 //printf("num = %d",num);
44 //while(1);
45
46
47 //全缓存
48 FILE *fp = NULL;
49 if((fp = fopen("./05test.c","w")) == NULL){
50 perror("fopen error");
51 return -1;
52 }
53 //不刷新
54 //0. 当遇到换行符时,不刷新时机
55 //fputs("hello world\n",fp);
56 //while(1);
57
58 //刷新
59 // 1.当程序结束时刷新
60 //fputs("hello world\n",fp);
61
62 //2.当指针关闭时刷新
63 //fputs("你好\n",fp);
64 //fclose(fp);
65 //while(1); //程序此时并没有结束
66
67 // 3.使用fflush函数刷新
68 //fputs("hello world\n",fp);
69 //fflush(fp);
70 //while(1);
71
72 //4.输入输出切换时刷新
73 //fputc('h',fp);
74 //fgetc(fp);
75 //while(1);
76
77 //5.当缓存区满时刷新
78 int i = 0;
79 for(i = 0; i < 6666; i++){
80 fputc('c',fp);
81 }
82 while(1);
83
84 return 0;
85 }
86
87
12.time
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 int main(int argc, const char *argv[])
8 {
9 //定义时间类型变量,保存秒数
10 //调用time函数,获取秒数赋值给变量
11 time_t T = time(NULL);
12 //调用localtime函数将秒数转变为标准时间保存在struct tm类型的变量中
13 struct tm *t = localtime(&T);//localtime函数
14
15 //输出获取的时间
16 printf("%4d-%02d-%02d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
17
18 return 0;
19 }
20
21
13.sprintf
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 int main(int argc, const char *argv[])
8 {
9 //定义时间类型变量,保存time函数获取的秒数
10 time_t T = time(NULL);
11 //调用localtime函数将获得的秒数转换为标准时间赋值
12 //给struct tm类型的时间指针
13 struct tm *t = localtime(&T);
14
15 //输出获取的时间
16 printf("%4d-%02d-%02d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
17
18 //定义一个数组将时间写入数组
19 char buf[128] = "";
20 sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
21
22 //打印数组中的值
23 printf("%s",buf);
24
25 return 0;
26 }
27
14.snprintf
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义一个容器
9 char buf[10];
10 //如果数组溢出,执行会出现段错误
11 //sprintf(buf,"abcdefghijklmn");
12 //会报警告,但是不会出现段错误,
13 //会将sizeof(str)-1个元素放入str
14 snprintf(buf,sizeof(buf),"abcdefghijklmn");
15 printf("%s\n",buf);
16 return 0;
17 }
18
19
15.fprintf/fscanf
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 //判断文件是否以追加的方式打开成功
10 FILE *fp = NULL;
11 char userName[32];
12 char pwd[32];
13 int num = 0;
14 int i = 0;
15 if((fp = fopen("./06test.txt","a")) == NULL){
16 perror("open error");
17 return -1;
18 }
19
20 //将账号和密码输入
21 printf("请输入要存入的账号和密码的个数\n");
22 scanf("%d",&num);
23 for(i = 1; i <= num; i++){
24 printf("please enter the NO.%d register now\n",i);
25 scanf("%s",userName);
26 printf("please enter the NO.%d password\n",i);
27 scanf("%s",pwd);
28 //将账号和密码输入到文件中
29 fprintf(fp,"%s %s\n",userName,pwd);
30 }
31
32
33 //关闭文件
34 fclose(fp);
35
36 //再以只读的方式打开文件
37 if((fp = fopen("./06test.txt","r")) == NULL){
38 perror("Fopen error");
39 return -1;
40 }
41 //定义变量接受登录账号和密码
42 char Inname[32];
43 char Inpwd[32];
44 printf("please enter the log in Name\n");
45 scanf("%s",Inname);
46 printf("please enter the log in pwd\n");
47 scanf("%s",Inpwd);
48
49 //比对登录账号和密码与已存入的进行比对
50 while(fscanf(fp,"%s %s",userName,pwd) != EOF){
51 if(0 == strcmp(userName,Inname) && 0 == strcmp(pwd,Inpwd)){
52 printf("success\n");
53 fclose(fp);
54 return 2;
55 }
56 }
57 printf("fail\n");
58 fclose(fp);
59
60 return 0;
61 }
62
63
16.fread
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 //判断是否以追加的方式打开文件
10 FILE *fp = NULL;
11 if((fp = fopen("./07test.txt","a+")) == NULL){
12 perror("fopen error");
13 return -1;
14 }
15 char s[] = "hello world";
16 //使用fwrite将字符串写入文件中
17 fwrite(s,1,sizeof(s),fp);
18
19 //关闭文件
20 fclose(fp);
21
22
23 //判断是否以只读的方式打开文件
24 if((fp = fopen("./07test.txt","r")) == NULL){
25 perror("fopen error");
26 return -1;
27 }
28 //用fread将fp指向空间的数据读入到buf内
29 //空间指针,每一项的大小,项数,文件指针
30 char buf[1024] = "";
31 int ret = fread(buf,1,sizeof(buf),fp);
32
33 //输出buf的数据,只输出sizeof(buf) 个值
34 printf("buf = %s\n",buf);
35
36 //将buf文件中的值输出
37 fwrite(buf,1,ret,stdout);
38
39 //关闭文件
40 fclose(fp);
41
42 return 0;
43 }
44
45
17.fread2
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 // 定义文件指针
9 FILE *fp = NULL;
10 //以只写的方式打开文件
11 if((fp = fopen("./07test.txt","w")) == NULL){
12 perror("fopen error");
13 return -1;
14 }
15 //通过取址将变量的值写入fp指向的文件
16 int num = 520;
17 fwrite(&num,sizeof(num),1,fp);
18 //关闭指针
19 fclose(fp);
20
21 //以只读的形式打开文件
22 if((fp = fopen("./07test.txt","r")) == NULL){
23 perror("fopen error");
24 return -1;
25 }
26 //以fread将fp指向地址内的数据读取到key所在的地址中
27 int key = 0;
28 int ret = fread(&key,sizeof(key),1,fp);
29 //将文件输出
30 printf("key = %d\n",key);
31
32 fclose(fp);
33
34
35 return 0;
36 }
37
18.fread3
1 #include
2 #include
3 #include
4 #include
5 #include
6 struct Stu{
7 char name[20];
8 int age;
9 double score;
10 };
11
12 int main(int argc, const char *argv[])
13 {
14 //定义文件指针
15 FILE *fp = NULL;
16 //以只写的形式打开文件
17 if((fp = fopen("./08test.txt","w")) == NULL){
18 perror("fopen error");
19 return -1;
20 }
21 //定义两个结构体变量
22 struct Stu s[2] = {{"zhangsan",18,99.88},{"lisi",22,99.99}};
23 //向文件中写入两个学生的数据
24 fwrite(s,sizeof(struct Stu),2,fp);
25 //关闭文件
26 fclose(fp);
27
28 //以只读的形式打开文件
29 if((fp = fopen("./08test.txt","r")) == NULL){
30 perror("fopen error");
31 return -1;
32 }
33 //用fread读取数据
34 struct Stu stu;
35 fread(&stu,sizeof(struct Stu),1,fp);
36 printf("name = %s\nage = %d\nscore = %lf\n",stu.name,stu.age,stu.score);
37
38 //关闭指针
39 fclose(fp);
40
41 return 0;
42 }
43
44
19.feof
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 FILE *fp = NULL;
9 //以只读的形式打开文件
10 if((fp = fopen("./01fopen.c","r")) == NULL){
11 perror("fopen error");
12 return -1;
13 }
14 char ch = '\0';
15 while(1){
16 ch = fgetc(fp);
17 printf("%c",ch);
18 if(feof(fp)){
19 puts("读到文件末尾");
20 break;
21 }else if(ferror(fp)){
22 puts("读取文件失败");
23 break;
24 }
25 }
26 //关闭文件
27 fclose(fp);
28
29
30
31 return 0;
32 }
33
34
20.fseek
1 #include
2 #include
3 #include
4 #include
5 #include
6 struct Stu{
7 char name[20];
8 int age;
9 double score;
10 };
11
12 int main(int argc, const char *argv[])
13 {
14 //定义文件指针
15 FILE *fp = NULL;
16 //以只写的形式打开文件
17 if((fp = fopen("./08test.txt","w")) == NULL){
18 perror("fopen error");
19 return -1;
20 }
21 //定义两个结构体变量
22 struct Stu s[2] = {{"zhangsan",18,99.88},{"lisi",22,99.99}};
23 //向文件中写入两个学生的数据
24 fwrite(s,sizeof(struct Stu),2,fp);
25 //关闭文件
26 fclose(fp);
27
28 //以只读的形式打开文件
29 if((fp = fopen("./08test.txt","r")) == NULL){
30 perror("fopen error");
31 return -1;
32 }
33
34 //要读取第二个学生信息,定位光标从开始位置向后偏移struct Stu大小
35 //用fread读取数据
36 struct Stu stu;
37 fseek(fp,sizeof(struct Stu),SEEK_SET);
38 fread(&stu,sizeof(struct Stu),1,fp);
39 printf("name = %s\nage = %d\nscore = %lf\n",stu.name,stu.age,stu.score);
40
41 //关闭指针
42 fclose(fp);
43
44 return 0;
45 }
46
47
21.fseek2
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main(int argc, const char *argv[])
7 {
8 //定义文件指针
9 //以追加的形式打开文件
10 FILE *fp = NULL;
11 if((fp = fopen("./09test.txt","a")) == NULL){
12 perror("fopen error");
13 return -1;
14 }
15 //更新指针执行到开头
16
17 fseek(fp,0,SEEK_SET);
18 // 向文件中写入数据
19 fputs("long time no see\n",fp);
20
21 fclose(fp);
22 return 0;
23 }
24