Linux学习笔记----初识Linux----文件操作----标准IO

标准I/O(缓冲区文件操作)

一、文件描述
  1. 认识缓冲区:
  • 一块内存区,在输入输出设备和CPU间,用来缓存数据。

  • 读写操作都要经过缓冲区满足一定条件(遇到’\n’通过相关函数)后进行真正的写入和读出

  • 标准输入/输出流:程序开始运行时,会有3个默认打开的文件标识符,

  • 0:标准输入:stdin:STDIN_FILENO 系统分配为键盘
    1:标准输出:stdout: STDOUT_FILENO 系统分配为显示器
    2:标准错误:stderr: STERROR_FILONO 系统分配为显示器

  • fflush()//清理缓冲区的函数:fflush(stdin)、、ffush(stdout)

二、FILE指针
  1. 定义:
    系统为打开文件建立的文件结构体,打开时返回来一个指针,程序通过指针获得文件信息,访问文件,关闭后,文件结构体被释放
  2. 形式
    struct _iobuf
    {
    char *_ptr;//当前缓冲区内容指针
    int _cnt;//缓冲区还有多少个字符
    char *_base;//缓冲区的起始地址
    int _flag;//文件流的状态,是否错误或者结束
    int _file;//文件描述符
    int _charbuf;//双字节缓冲,缓冲2个字节
    int _bufsiz;//缓冲区大小
    char *_tmpfname;//临时文件名
    };
    typedef struct _iobuf FILE;
三、打开关闭

fopen

  1. 原型:FILE * fopen(const char * path,const char * mode);
  2. 功能:打开由path指定的一个文件
  3. 头文件:#include
  4. 参数:path:带路径的文件名
  5. mode打开方式:
  • r 打开只读文件,该文件必须存在。

  • r+ 打开可读写的文件,该文件必须存在。

  • rb+ 读写打开一个二进制文件,只允许读写数据。

  • rt+ 读写打开一个文本文件,允许读和写。

  • w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

  • w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

  • a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

  • a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

  • wb 只写打开或新建一个二进制文件;只允许写数据。

  • wb+ 读写打开或建立一个二进制文件,允许读和写。

  • wt+ 读写打开或着建立一个文本文件;允许读写。

  • at+ 读写打开一个文本文件,允许读或在文本末追加数据。

  • ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

  1. 返回值:
    成功,返回操作文件的指针
    失败,返回NULL

fclose

  1. 原型:int fclose(FILE *fp)
  2. 功能:关闭文件指针,释放资源
  3. 参数:fp: fopen返回的文件指针
  4. 返回值:
    成功返回 0
    失败返回 -1
四、单个字符读写

fputc

  1. 原型:int fputc(int c, FILE *stream)
  2. 头文件:#include
  3. 功能:写一个字符到文件中
  4. 参数:
    c:要写入的字符
    stream:文件指针(要有可写权限)
  5. 返回值:
    成功:字符c
    失败: EOF
    fgetc
  6. 原型:int fgetc(FILE *stream);
  7. 头文件:#include
  8. 功能:从文件中读一个字符
  9. 参数:
    5:要写入的字符
    stream:文件指针(要有可写权限)
  10. 返回值:
    成功:返回读出的字符
    失败: EOF
    feof
  11. 原型:int feof(FILE *stream);
  12. 头文件:#include
  13. 功能:检查文件是否读取结束
  14. 参数: stream:指向待检查文件的指针
    5:要写入的字符
    stream:文件指针(要有可写权限)
  15. 返回值:
    文件未结束: 0
    文件已结束: 1
五、字符串读写

fgets

  1. 原型:char * fgets(char * s, int size, FILE * fp);
  2. 头文件:#include
  3. 功能:从fp指向的文件中读出一行(最多size-1个字符) 直到出现换行字符、读到文件尾或是已读了size-1 个字符为止,写入s指向的缓冲区。
  4. 参数:
    s 保存读取到的字符
    size 要读取的字符的个数
    fp 为文件流指针
  5. 返回值:
    取成功,返回读取到的字符串,失败NULL

fputs

  1. 原型:int fputs(const char *s, FILE *fp)
  2. 功能:将字符串s写入fp指向的文件中
    3.参数
    s:要写入文件的缓冲区指针
    fp:要写入的目标文件的流指针
六、块读块写

fread

  1. 原型: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
  2. 头文件:#include
  3. 功能:读文件
  4. 参数:
    ptr: 要读入的缓冲区指针, 提前申请好的
    size: 要读出的信息单元的大小 一般情况下, size设为1
    nmemb:要读出的信息单元的个数, size* nmemb不大于ptr大小
    fp: 要读的文件指针, 提前用fopen打开的
    返回值:
    成功:读取的信息单元的个数
    失败: EOF
    一般情况下, size设为1, nmemb设为想要读取
    的字节数或者ptr指向buf 的大小,返回值为实际读
    写的字节数。

fwrite

  1. 原型: size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *fp);
  2. 头文件:#include
  3. 功能:写文件
  4. 参数:
    ptr: 要写入的缓冲区指针, 提前申请好的
    size: 要写入的信息单元的大小 一般情况下, size设为1
    nmemb:要写入的信息单元的个数, size* nmemb不大于ptr大小
    fp: 要写的文件指针, 提前用fopen打开的
  5. 返回值:
    成功:写入的信息单元的个数
    失败: EOF
    一般情况下, size设为1, nmemb设为想要读取
    的字节数或者ptr指向buf 的大小,返回值为实际读
    写的字节数。
七、格式化读写

fscanf(格式化输入)

  • int fscanf ( FILE * fp, const char * format, … );
  • fscanf从fp中格式化输入
  • fscanf(fd,"%s",buf);将fd所指向的文件里边的内容输入到buf中
    
  • fscanf(fp,"%d %s",&c,d);从fp所指向的文件里边读取一个整数给c,在读取一个字符串给d

fprintf(格式化输出)

  • int fprintf(FILE *fp, const char *format, …)
  • fprintf格式化得到的字符串写到fp指向的文件里面
  • 示例 fprintf(fd,"%s","what are you doing ");

sprintf(格式化字符串复制)

  • int sprintf(char str, const charformat, …)
  • 把某一种类型的数据转换成字符串存放到某一个地址内
  • #include
    main()
    {
    char * a=”This is string A!”;
    char buf[80];
    sprintf(buf,” %s\n”,a);
    printf(“%s”.buf);
    }
八、文件指针定位

rewind

  • void rewind(FILE *fp);
  • 将读写指针定位到文件开始位置,无返回值

fseek

  • 将读写指针定位到指定位置
  • 参数
    fp:要操作的文件
    offset:偏移量(可正可负)
    whence:参考位置
    SEEK_SET //文件开始
    SEEK_CUR //文件当前位置
    SEEK_END //文件尾

ftell

  • long ftell(FILE *fp);
  • 返回当前文件读写指针的位置,常用来求文件的大小
  • 操作定位内部的读写指针

你可能感兴趣的:(标准IO)