zoukankan      html  css  js  c++  java
  • Linux下普通IO文件操作函数---C语言

    普通文件IO总结

    FILE结构体

        typedef struct 
      {  
        int level; /*填充/清空一级缓存*/
        unsigned flag; /*文件状态指针*/
        char fd; /*文件描述符*/
        unsigned char hold; /*ungetc char if no buffer*/
        int bsize; /*缓存区大小*/
        unsigned char *buffer; /*数据缓冲区*/
        unsigned char *curp; /*当前活动指针*/
        unsigned istemp; /*临时文件指示器*/
        short token; /*用于有效性检查*/
      }FILE;  

    打开文件fopen函数

    文件指针名=fopen(文件名,使用文件方式)

    eg:

    FILE *fp;               //文件指针
    fp=("file a","r"); //以只读方式打开hzk16

    打开方式有:

    描述符意义
    “rt” 只读打开一个文本文件,只允许读数据
    “wt” 只写打开或建立一个文本文件,只允许写数据
    “at” 追加打开一个文本文件,并在文件末尾写数据
    “rb” 只读打开一个二进制文件,只允许读数据
    “wb” 只写打开或建立一个二进制文件,只允许写数据
    “ab” 追加打开一个二进制文件,并在文件末尾写数据
    “rt+” 读写打开一个文本文件,允许读和写
    “wt+” 读写打开或建立一个文本文件,允许读写
    “at+” 读写打开一个文本文件,允许读,或在文件末追加数 据
    “rb+” 读写打开一个二进制文件,允许读和写
    “wb+” 读写打开或建立一个二进制文件,允许读和写
    “ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据

    fopen若过出错则,返回一个NULL可以用作错误异常处理的判断条件;

    fclose函数

    用于关闭当前文件 fclose(FILE*);返回值为0表示正确,非零错误。

    文件读写操作:

    ·字符读写函数 :fgetc和fputc ·字符串读写函数:fgets和fputs ·数据块读写函数:freed和fwrite ·格式化读写函数:fscanf和fprinf

    fgetc(FILR*)与fputc(const char,FILE*)/fputc(char,FILE*):

    fgetc每次在文件中读一个字节,每读一次文件内的字符指针往后挪一位,可多次重复使用依此读出文件内容。

    fput函数每次写入一个字符,每写一次文件内指针向后挪动一位,可多次连续使用写入。

    fgets(char* buf, int n, FILE*)与fputs(char* buf, FILE*):

    从文件中读出 n-1 个字符放入buf中

    fputs将字符串写入文件中

    fread(cahr* buf, int size, int count,FILE* fp)与fwrite(char* buf, int size, int count,FILE* fp)

    fread 从fp中读入conut个size长度的字符串到buf中

    fwirte从buf中读出count个size个长度的字符串到fp中

    fscanf(FILE*, 格式, 列表)和 fprintf(FILE*, 格式, 列表)

    eg:

    fprintf(fp,"%s %d %d %s",pp->name,pp->num,pp->age,pp->addr);

    fscanf(fp,"%s %d %d %s",qq->name,&qq->num,&qq->age,qq->addr);

    rewind(FILE*)

    将文件内部指针移到文件首

    fseek(FILE* fp,int count,int startpoint)

    fp 文件指针

    count 位移量,表示从startpoint开始计算位移量

    startpoint有三种形式:

    起始点表示符
    SEEK—SET 0
    当前 SSEEK-CUR 1
    SSEEK-END 2

    设置bu模式函数

    #include <stdio.h>

    void setbuf(FILE *stream, char *buf);

    int setvbuf(FILE *stream, char *buf, int mode, size_t size);

    void setbuffer(FILE *stream, char *buf, size_t size);

    void setlinebuf(FILE *stream);

         

    setbuf 与 setvbuf 指定缓冲区(在读写文件之前),将不再使用系统默认的缓冲区

    setbuf(fp, NULL) 使得文件不带缓冲区

    setbuf(ffp , NULL, _IONBF , 0 ) 在此情况下与setbuf(fp, NULL)相同

    setbuf 中参数:

    stream表示操作文件;

    buf 缓冲区,;

    mode 模式;

    size 大小。

    setbuffer函数

    此函数与setbuf函数类似,好在可自定义buf的大小

    setlinebuf函数

    此函数等价于setvbuf(fp, (char *) NULL, _IOLBF, 0);

    小点:

    stdin 0 标准输入

    stdout 1 标准输出

    stderr 2 标准错误

    _IONBF 无缓冲

    _IOLBF 行缓冲

    _IOFBF 全缓冲

    _IO_LINE_BUF 行缓冲

    _IO_UNBUFFERED 无缓冲

    对IO普通文件操作整理,有错误请指出;

    参考:http://www.cnblogs.com/whiteyun/archive/2009/08/08/1541822.html

  • 相关阅读:
    Msql-51CTO笔记
    Elasticsearch 学习第一天
    大数据开发参考资料
    1.docker的安装
    java_根据实体字段中的中文汉字排序
    遍历set集合,进行数据的拼接
    关于integer 和int
    03.linux环境安装mysql8的安装包
    02.linux下面安装jdk8
    01.VMware15.5下安装Centos7
  • 原文地址:https://www.cnblogs.com/XLX-0327/p/10631365.html
Copyright © 2011-2022 走看看