zoukankan      html  css  js  c++  java
  • 第三季-第9课-库函数方式文件编程

    第9课-库函数方式文件编程

     

    9.1 核心理论

    1. 函数库

    基于C语言函数库的文件编辑是独立于具体操作系统平台的,不管是windows、linux还是其他的操作系统,都是使用这些函数。使用库函数进行函数程序设计可以提高函数的可移植性。

    对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

    1. 文件指针

    在系统调用方式实现的文件访问中,使用文件描述符(一个整数)来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向件,这个类型中包含了管理文件流的信息。而指向该类型的指针FILE* 则被称之为文件指针。

    它和文件描述符的作用是一样的。

    9.2 函数学习

    学习方法:三不学习法。

    先在《UNIX环境高级编程》中找到相关的命令;通过man命令查看函数入队用法和原型等信息;手把手写代码。

    1. 打开文件

    (1)函数名

    fopen

    (2)函数原形

    FILE *fopen(const char *path,const char *mode);

    (3)函数功能

    打开文件

    (4)所属头文件

    #include<stdio.h>

    (5)返回值

    成功:文件指针

    失败:NULL

    (6)参数说明

    path:指定打开的文件名(包含路径)

    mode:文件打开模式

    有六种方式:r,w,a,r+,w+,a+

    (7)范例程序

    #include<stdio.h>

    void main()

    {

             FILE *fd;

             fd = fopen("/home/test.txt","w+");         //w+表示在文件不存在的时候可以创建文件。

    }

    1. 关闭文件

    (1)函数名

    fclose

    (2)函数原形

    int fclose(FILE *fp);

    (3)函数功能

    关闭文件

    (4)所属头文件

    #include<stdio.h>

    (5)返回值

    成功:0

    失败:EOF

    (6)参数说明

    fp:待关闭的文件指针

    1. 读文件

    (1)函数名

    fread

    (2)函数原形

    size_t fread(void  *ptr,  size_t  size,  size_t  nmemb, FILE  *stream);

    (3)函数功能

    从文件中读取数据

    (4)所属头文件

    #include<stdio.h>

    (5)返回值

    成功:成功读取到的数据量

    失败:0

    (6)参数说明

    stream:指向要读取的文件

    ptr:指向我们读取后的数据保存位置

    nmemb:我们要把读取的数据分成nmemb个块

    size:读取数据已经分成nmemb个块,每个块的大小是size。

    (7)范例程序

    最开始我们使用下面的程序,通过更改/home下的文件,给我们要打开的文件赋予一些数据。但是,我们会发现打印不出来数据。

    #include<stdio.h>

    void main()

    {

             FILE *fd;

             char c_buf[15];

             fd = fopen("/home/test.txt","w+");

             fread(c_buf,1,10,fd);

             printf("now we read %s ",c_buf);

             fclose(fd);

    }

    问题出现在w+这个参数上。我们看一下这个参数的说明:open for reading and writing. The file is craet if it does not exist, otherwise it is truncated. The stream is positioned at the beginning of the fie. 改成下面的程序就可以了:

    #include<stdio.h>

    void main()

    {

             FILE *fd;

             char c_buf[15];

             fd = fopen("/home/test.txt","r+");

             fread(c_buf,1,10,fd);

             c_buf[10] = '';    //加上终止符,防止打印时出现乱码。

             printf("now we read %s ",c_buf);

             fclose(fd);

    }

    1. 写文件

    (1)函数名

    fwrite

    (2)函数原形

    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

    (3)函数功能

    向文件中写入数据

    (4)所属头文件

    #include<stdio.h>

    (5)返回值

    成功:成功写入的数据量

    失败:0

    (6)参数说明

    stream:要写入数据的文件指针

    ptr:存放要写入到文件中的数据

    nmemb:我们要把写入的数据分成nmemb个块

    size:写入数据已经分成nmemb个块,每个块的大小是size。

    (7)范例程序

    #include<stdio.h>

    void main()

    {

             FILE *fd;

             char *c_buf = "987654321";

             fd = fopen("/home/test.txt","r+");

             fwrite(c_buf,5,1,fd);

             fclose(fd);

    }

    1. 文件定位

    每一个打开的文件都有一个隐形的指针。

    (1)函数名

    fseek

    (2)函数原形

    int fseek(FILE *stream, long offset, int whence);

    (3)函数功能

    设置文件的位置指针。

    (4)所属头文件

    #include<stdio.h>

    (5)返回值

    成功:0

    失败:-1

    (6)参数说明

    stream:指向的文件

    whence:表示指针的开始位置,只能取下面的三种值。

    SEEK_SET文件的开头加上offset(正的)

    SEEK_CUR当前的指针加上offset(可正可负)的位置

    SEEK_END从文件的末尾加上offset(负的)

    offset:指针将要加的数。

    (7)范例程序

    #include<stdio.h>

    void main()

    {

             FILE *fd;

             char *c_buf = "987654321";

             fd = fopen("/home/test.txt","r+");

             fseek(fd,8,SEEK_SET);

             fwrite(c_buf,5,1,fd);

             fclose(fd);

    }

  • 相关阅读:
    python排序
    JavaMail转发邮件
    Java发送邮件Demo
    字符编码
    常用的python内建函数
    mysql-python安装
    ubuntu安装flash
    grep简介
    【java中的static关键字】
    【java中的final关键字】
  • 原文地址:https://www.cnblogs.com/free-1122/p/11345087.html
Copyright © 2011-2022 走看看