Chinaunix首页 | 论坛 | 博客
  • 博客访问: 493930
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: LINUX

2014-04-11 20:55:11

三、库函数文件类

库函数:基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows、Linux还是其他的操作系统中,都是使用这些函数。使用库函数进行程序设计可提高程序的可移植性。
流:对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
文件指针:在系统调用方式实现的文件访问中,使用文件描述符(一个整数)来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向该类型的指针FILE* 则被称之为文件指针。

3.1.打开文件:                        FILE *fopen(const char *path, const char *mode);

                                           打开文件

     所属头文件:                     stdio.h

     返回值:                            成功:返回文件指针 失败:NULL

    参数说明:                         path:指定打开的文件名字(含路径)

                                           mode:文件打开模式    r、r+、w、w+、a、a+
mod是字符串,需要加双引号

  1. #include <stdio.h>


  2. void main()
  3. {
  4.     FILE *fp;
  5.     char *path = "./test.c";

  6.     fp = fopen(path, "w+");
  7.     if(fp < 0)
  8.         printf("file fopen failed!\n");


  9. }



3.2.关闭文件:                        int fclose(FILE *fp);

                                          关闭一个文件流

     所属头文件:                    stdio.h

     返回值:                          成功:0  失败:EOF

     参数说明:                       fp:待关闭的文件指针

  1. #include <stdio.h>

  2. void main()
  3. {
  4.     FILE *fp;
  5.     char *path = "./test";

  6.     fp = fopen(path, "w+");
  7.     if(fp < 0)
  8.         printf("file fopen failed!\n");

  9.     close(fp);
  10. }


3.3.读文件:                          size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

                                          从文件中读取数据

    所属头文件:                     

    返回值:                           成功:返回读取到的数据量 失败:0

    参数说明:                        ptr:文件读取出来后的存放位置

                                         size:读取每块数据的大小

                                         nmemb:读取的数据块数

                                         stream:指向要读取的文件
w+会对存在的文件清空内容,导致读取有误:

  1. #include <stdio.h>

  2. void main()
  3. {
  4.     FILE *fp;
  5.     char buf[20];
  6.     size_t ret;

  7.     fp = fopen("./test.c","r+");
  8.     if(fp == 0)
  9.     {
  10.         printf("file fopen failed!\n");
  11.         return;
  12.     }

  13.     ret = fread(buf,5,2,fp);
  14.     if(ret == 0)
  15.         printf("file fread failed!\n");
  16.     else
  17.     {
  18.         buf[10] = '\0';
  19.         printf("now we read %s\n",buf);
  20.     }

  21.     fclose(fp);
  22. }


3.4.写文件:                         size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);

                                         向文件写入

     所属头文件:                    stdio.h

     返回值:                         成功:返回成功写入的数据量         失败、达到文件结尾:0

    参数说明:                      Ptr:要写入数据的文件指针

                                        Size:每块数据的大小

                                        Nmemb:数据的块数

                                        Stream:指向要写入的文件

  1. #include <stdio.h>

  2. void main()
  3. {
  4.     FILE *fp;
  5.     size_t ret;
  6.     char *buf = "this is my string.";

  7.     fp = fopen("./test.c", "w+");
  8.     if(fp == NULL)
  9.          printf("file fopen failed!\n");

  10.     ret = fwrite(buf, 18, 1, fp);
  11.     if(ret == 0)
  12.          printf("file fwriet failed!\n");

  13.     fclose(fp);
  14. }


3.5.定位文件                       Int fseek(FILE *stream,long offset, int whence);

                                         设置位文件位置指针

    所属头文件:                    stdio.h

    返回值:                          成功:0         失败:-1

    参数说明:                       Stream:设置指针位置的文件指针

                                        Offset:偏移量;正数往后,负数往前

                                        Whence:设置指针位置

                                        SEEK_SET 文件开头

                                        SEEK_CUR:当前位置

                                        SEKK_END:文件末尾

  1. #include <stdio.h>

  2. void main()
  3. {
  4.     FILE *fp;
  5.     char *buf_w = "this is my string.";
  6.     char buf_r[10];
  7.     size_t ret;

  8.     fp = fopen("./test.c", "r+");
  9.     if(fp == NULL)
  10.     {
  11.         printf("file fopen failed!\n");
  12.         return;
  13.     }
  14.     
  15.     ret = fwrite(buf_w, 18, 1, fp);
  16.     if(ret == 0)
  17.     {
  18.         printf("file fwrite failed!\n");
  19.         return;
  20.     }

  21.     fseek(fp,0,SEEK_SET);

  22.     ret = fread(buf_r,9,1,fp);
  23.     if(ret == 0)
  24.     {
  25.         printf("file fread failed!\n");
  26.         return;
  27.     }
  28.     else
  29.     {
  30.         buf_r[9] = '\0';
  31.         printf("fread buf is \"%s\"\n",buf_r);
  32.     }
  33.     close(fp);
  34. }


 

阅读(685) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~