linux文件IO操作篇 (二) 缓冲文件

2. 缓冲文件操作

//规模较大 实时性低的文件
//当数据长度快要超过缓冲区的范围时,或者时间周期达到时,数据才被送往指定位置
//需要使用FILE * 作为文件标识符
//stdin        标准输入
//stdout    标准输出
//stderr    标准错误
//2.1文件流的打开与关闭
#include <stdio.h>
FILE *fopen(const char * restrict path, const char * restrict mode);
int fclose(FILE *stream);

//2.2 文件流的读取与写入
size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
int fflush(FILE *stream);

//2.3文件流的格式化输入输出
int fscanf(FILE *restrict stream, const char *restrict format, ...);
int fprintf(FILE * restrict stream, const char * restrict format, ...);

 

2.1 fopen

FILE *fopen(const char * restrict path, const char * restrict mode);
//fopen 和 open 相似,但是fopen没有创建文件的功能,

/*
fopen 常用的描述符有 r rb 只读方式打开 w wb 只写方式打开 a ab 只写打开追加文件末尾 r+ rb+ 读写方式打开 w+ wb+ 读写打开,长度置零 a+ ab+ 读写打开,追加文件末尾 */

 

2.2 fread

size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
//读取文件内容到缓冲区中
//fread(buff, 每次读取缓冲区的大小, 读取次数, 文件流)
//加入文件 102400 ,而每次读取1024,那么要读取100次。

 

2.3 fwrite

size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
//将缓冲区的内容写入到文件中
//fwrite 和 fread 相同参数,方向相反

 

2.4 fscanf 和 fprintf

//从文件中读取,并按一定合适读取内容,保存在buff中。
int fscanf(FILE *restrict stream, const char *restrict format, ...);
//把buff中的内容按一定格式保存到文件中
int fprintf(FILE * restrict stream, const char * restrict format, ...);

 

例子:实现一个文件的拷贝,先打开源文件,将源文件的内容读取到buf中,再打开目标文件,将buf写入到目标文件中,实现文件的拷贝

#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define BUFSIZE 65535
#define SIZE 1024

int main(int argc, char const *argv[])
{
    
    FILE *fd;
    int ret;
    char buf[BUFSIZE] = {0};

    fd = fopen("./fread_fwrite.c","r");    //打开本文件fread_fwrite.c
    if(fd == NULL)
    {
        puts("cant open file .");
        return -1;
    }

    ret = fread(buf,SIZE,BUFSIZE/SIZE,fd);    //每次读取SIZE大小,总共读取BUFFSIZE/SIZE次,从fd中读取
    if(ret < 0)
    {
        puts("read fails");
        return -2;
    }
    fclose(fd);

    fd = fopen("./file","w+");    //打开另一个文件,用于写入
    if(fd == NULL)
    {
        puts("open file fails");
        return -3;
    }

    ret = fwrite(buf, SIZE, BUFSIZE/SIZE, fd);    //从buf写入,每次写入SIZE,写 BUFFSIZE/SIZE 次,写到fd中。
    if(ret < 0)
    {
        puts("buf write fails");
        return -4;
    }
    fclose(fd);


    return 0;
}

 

posted @ 2019-03-31 22:49  kmist  阅读(518)  评论(0编辑  收藏  举报