2. 缓冲文件操作

  1. //规模较大 实时性低的文件
  2. //当数据长度快要超过缓冲区的范围时,或者时间周期达到时,数据才被送往指定位置
  3. //需要使用FILE * 作为文件标识符
  4. //stdin 标准输入
  5. //stdout 标准输出
  6. //stderr 标准错误
  1. //2.1文件流的打开与关闭
  2. #include <stdio.h>
  3. FILE *fopen(const char * restrict path, const char * restrict mode);
  4. int fclose(FILE *stream);
  5.  
  6. //2.2 文件流的读取与写入
  7. size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
  8. size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
  9. int fflush(FILE *stream);
  10.  
  11. //2.3文件流的格式化输入输出
  12. int fscanf(FILE *restrict stream, const char *restrict format, ...);
  13. int fprintf(FILE * restrict stream, const char * restrict format, ...);

2.1 fopen

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

  3. /*fopen 常用的描述符有
  4. r rb 只读方式打开
  5. w wb 只写方式打开
  6. a ab 只写打开追加文件末尾
  7. r+ rb+ 读写方式打开
  8. w+ wb+ 读写打开,长度置零
  9. a+ ab+ 读写打开,追加文件末尾
  10. */

2.2 fread

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

2.3 fwrite

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

2.4 fscanf 和 fprintf

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

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

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4.  
  5. #define BUFSIZE 65535
  6. #define SIZE 1024
  7.  
  8. int main(int argc, char const *argv[])
  9. {
  10.  
  11. FILE *fd;
  12. int ret;
  13. char buf[BUFSIZE] = {};
  14.  
  15. fd = fopen("./fread_fwrite.c","r"); //打开本文件fread_fwrite.c
  16. if(fd == NULL)
  17. {
  18. puts("cant open file .");
  19. return -;
  20. }
  21.  
  22. ret = fread(buf,SIZE,BUFSIZE/SIZE,fd); //每次读取SIZE大小,总共读取BUFFSIZE/SIZE次,从fd中读取
  23. if(ret < )
  24. {
  25. puts("read fails");
  26. return -;
  27. }
  28. fclose(fd);
  29.  
  30. fd = fopen("./file","w+"); //打开另一个文件,用于写入
  31. if(fd == NULL)
  32. {
  33. puts("open file fails");
  34. return -;
  35. }
  36.  
  37. ret = fwrite(buf, SIZE, BUFSIZE/SIZE, fd); //从buf写入,每次写入SIZE,写 BUFFSIZE/SIZE 次,写到fd中。
  38. if(ret < )
  39. {
  40. puts("buf write fails");
  41. return -;
  42. }
  43. fclose(fd);
  44.  
  45. return ;
  46. }

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. asyncio标准库1 Hello World

    利用asyncio的event loop,编写和调度协程 coroutine [,kəuru:'ti:n] n. 协程 Simple coroutine(调用1个协程) import asyncio ...

  2. 二、安装桌面——Linux学习笔记

    安装桌面并不是商业化用的,只是为了熟悉Linux文档结构而已. 这个比较简单 1.输入安装桌面命令 # yum -y groups install "GNOME Desktop" ...

  3. Third week-homework(员工管理系统)

    需求: 可以查询员工所有信息 可以修改员工信息 可以增加新员工 code: import sys,json # yuangong = { # "1": ["faker&q ...

  4. Andriod ADB Interface驱动安装失败Configure USB Debug for Android

    介绍: Linux或Apple或OS X ,已经安装了USB驱动调试为Android的帮助,确认您的Android USB调试连接配置和正常工作. Windows下需要自己手动下载驱动安装或者通过下载 ...

  5. 数据库-identifying 与non-identifying realtionship 区别

    MySQL Workbench 或者是 E-RWin等进行数据库建模时,通常会对数据表进行关联操作,即设置表与表之间的关系 1:1 1:n m:n,而它们具有 identifying realtion ...

  6. Android(java)学习笔记11:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中,关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 下面 ...

  7. HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...

  8. [18/11/30] toString()方法 和 equals() 方法

    一. toString() 方法 Object类中定义有public String toString()方法,其返回值是 String 类型  默认: return getClass().getNam ...

  9. log4j+AOP 记录错误日志信息到文件中

    AOP 采用异常通知切入,把指定包的异常记录到日志文件. 先看log4j.properties ,控制台输出的是普通信息, 文件输出的是异常信息. log4j.rootLogger=DEBUG, Co ...

  10. eclipse集成tomcat 部署项目设置

    ============================================================= 1. 下载安装tomcat插件 ====================== ...