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. C# 调用第三方DLL z

    http://blog.163.com/da7_1@126/blog/static/104072678201311721326318/ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代 ...

  2. GO Lang学习笔记 - 基础知识

    Go lang Learn Note 标签(空格分隔): Go Go安装和Go目录 设置环境变量GOROOT和GOPATH,前者是go的安装目录,后者是开发工作目录.go get包只会将包下载到第一个 ...

  3. win7 64位 安装java jdk1.8 ,修改配置环境变量

    下载jdk1.8,下载地址:http://www.wmzhe.com/soft-30118.html 安装时有两个程序,都安装在同一个目录下. win7 64位 安装java jdk1.8 ,修改配置 ...

  4. Oracle分区表分批迁移

    遇到个分区表数据量超大的case,磁盘空间不够,所以考虑使用数据泵分批导数据,测试如下: source : oracle windows 32bit 10.2.0.1target  :  oracle ...

  5. 一点一点学写Makefile(6)-遍历当前目录源文件及其子目录下源文件

    时候,我们在开发的时候需要将本次工程的代码分成多个子目录来编写,但是在Makefile的编写上却是个问题,下面我就教大家怎么构建带有子文件夹的源代码目录的自动扫描编译 下面这张图是我的文件树 这里面s ...

  6. SAPGUI里实现自定义的语法检查

    需求:在SAPGUI里点击这个语法检查的小图标或者直接按快捷键Ctrl+F2可以执行ABAP标准的语法检查. 如果需要实现SAPGUI里自定义的语法检查,比如,某团队强制要求应用程序类的每个方法的实现 ...

  7. 「C基础」位运算

    0. 原码.补码.反码 初学者只做了解即可 见 张子秋的博客 无论正负数,在内存中存储的都是补码 正数:反码 == 原码 == 补码 负数:反码 == ~原码 补码 == 反码+1 1. & ...

  8. 高通Vuforia

    这里使用高通的Vuroria来做一个AR歌姬. 工具: Vuforia,MMD4Mecanim 模型: 初音未来pmd模型文件,极乐净土vmd动作文件. 逻辑: 当发现识别卡时:开启音乐,模型速度为1 ...

  9. 使用Sleep方法延迟时间

    实现效果: 关键知识:(线程的定义) 实现代码: private void Form1_Load(object sender, EventArgs e) { Thread show = new Thr ...

  10. unbuntu循环登录

    http://www.myexception.cn/operating-system/1707766.html