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] = {}; fd = fopen("./fread_fwrite.c","r"); //打开本文件fread_fwrite.c
if(fd == NULL)
{
puts("cant open file .");
return -;
} ret = fread(buf,SIZE,BUFSIZE/SIZE,fd); //每次读取SIZE大小,总共读取BUFFSIZE/SIZE次,从fd中读取
if(ret < )
{
puts("read fails");
return -;
}
fclose(fd); fd = fopen("./file","w+"); //打开另一个文件,用于写入
if(fd == NULL)
{
puts("open file fails");
return -;
} ret = fwrite(buf, SIZE, BUFSIZE/SIZE, fd); //从buf写入,每次写入SIZE,写 BUFFSIZE/SIZE 次,写到fd中。
if(ret < )
{
puts("buf write fails");
return -;
}
fclose(fd); return ;
}

linux文件IO操作篇 (二) 缓冲文件的更多相关文章

  1. linux文件IO操作篇 (一) 非缓冲文件

    文件IO操作分为 2 种 非缓冲文件IO 和 缓冲文件IO 它们的接口区别是 非缓冲 open() close() read() write() 缓冲 fopen() fclose() fread() ...

  2. Linux系统编程--文件IO操作

    Linux思想即,Linux系统下一切皆文件. 一.对文件操作的几个函数 1.打开文件open函数 int open(const char *path, int oflags); int open(c ...

  3. Linux文件IO操作

    来源:微信公众号「编程学习基地」 目录 文件操作 Linux文件类型 Linux文件权限 修改文件权限 Linux error 获取系统调用时的错误描述 打印错误信息 系统IO函数 open/clos ...

  4. Linux学习记录--文件IO操作相关系统编程

    文件IO操作相关系统编程 这里主要说两套IO操作接口,各自是: POSIX标准 read|write接口.函数定义在#include<unistd.h> ISO C标准 fread|fwr ...

  5. LInux文件基础知识和文件目录操作(二)文件I/O操作

    1.文件I/O操作分为两部分来讲解: 第一部分是非缓冲文件操作,这种操作适合于比较小规模文件的读写和对实时性要求很高的设备的数据通信,这类操作是系统调用提供的: 第二部分是缓冲文件操作,所面向的则是大 ...

  6. 9.2 Go 文件IO操作

    9.2 Go 文件IO操作 1.1.1. bufio包 带有缓冲区的IO读写操作,用于读写文件,以及读取键盘输入 func main() { //NewReader返回一个结构体对象指针 reader ...

  7. 树莓派学习笔记——使用文件IO操作GPIO SysFs方式

    0 前言     本文描写叙述假设通过文件IO sysfs方式控制树莓派 GPIO端口.通过sysfs方式控制GPIO,先訪问/sys/class/gpio文件夹,向export文件写入GPIO编号, ...

  8. imx6用文件io操作gpio

    具体请参考: http://blog.csdn.net/u014213012/article/details/53140781 这里要注意的是: 要让linux支持文件io方式操作gpio,首先驱动必 ...

  9. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

随机推荐

  1. 猿创|有赞的zan framework安装与使用[2]

    下载并安装comoser curl -sS https://getcomposer.org/installer | php 结果各种超时 不能忍,打开迅雷下载installer:https://get ...

  2. python_列表/元组/元组列表以及如何使用

    1.list是处理一组有序项目的数据结构 #定义一个列表 list=[1,2,3] print type(list) print list[0] 输出: <type 'list'> 1 2 ...

  3. Vim中 ctags 跳转直接跳到第一个匹配行的问题

    意图 用ctags搜索代码时, 用 ctrl + ] 后,只有一个匹配项直接跳转,有多个则列出所有匹配项选择跳转 问题 在 vim 中使用 ctags 是一个很令人舒服的事情,但有时一些默认的配置和不 ...

  4. 解决Could not get lock /var/cache/apt/archives/lock

    在ubuntu apt-get upgrade的时候,遇到: E: Could not get lock /var/cache/ apt/archives/lock - open (11 Resour ...

  5. sql 两表查询后 更新某表中部分字段

    这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...

  6. SSH 本地和服务器传输

    [转]https://www.cnblogs.com/magicc/p/6490566.html SCP 使用方式如下: 1.上传本地文件到服务器 scp /path/filename usernam ...

  7. iOS 适配安装包

    每次自己需求都是去一顿搜索,所以就在此记录一下,免得以后再麻烦. 链接: https://pan.baidu.com/s/1zXEFlt94bz3O1e3GdtG92w 密码: rc4k 摘抄自:ht ...

  8. linux 安装redis和集群

    一.安装redis单机 1.安装编译环境 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 2.安装步骤: 第一步:r ...

  9. FastJSON、Gson、Jackson(简单了解使用)

    下载地址(maven) Jackson:http://mvnrepository.com/search?q=jackson FastJson:http://mvnrepository.com/sear ...

  10. visual assist x vs2012不智能提示

    今天装了visual assist x,但是在vs2012里不智能提示,在哪里看了看.找到了开关. 我英文不好.... 默认的话是不选中的.