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. 安全隐患,你对X-XSS-Protection头部字段理解可能有误

    0×00. 引言 我曾做过一个调查,看看网友们对关于X-XSS-Protection 字段的设置中,哪一个设置是最差的,调查结果令我非常吃惊,故有此文. 网友们认为 最差的配置是X-XSS-Prote ...

  2. 利用SQL Server Management Studio(SSMS)复制数据库

    利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...

  3. 服务器常用命令之 启用/禁用PING状态

    启用 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all  (PING的通) 禁用 echo 1 > /proc/sys/net/ipv4/i ...

  4. Uva 10559 消除方块

    题意: 每次可以选择一个区间(连续相同的序列)消除,得分为 len*len:问最大得分. 分析: 很容易想到是区间DP,但是不像普通的区间DP一样切割方式~~~ 如果定义 d[ i ][ j ] 区间 ...

  5. Codeforces Round #432 (Div. 2)

    A. Arpa and a research in Mexican wave Arpa is researching the Mexican wave. There are n spectators ...

  6. Lucas 大组合数

    题目:HDU 3037 题意:有n个树,m个坚果,放到n个树里,可以不放完,有多少种方法. 分析: 得到组合数了. 大组合数什么费马小定理,Lucas定理都来了: 总的说,不能用二维地推了,用的却是组 ...

  7. (第三场) C Shuffle Cards 【STL_rope || splay】

    题目链接:https://www.nowcoder.com/acm/contest/141/C 题目描述 Eddy likes to play cards game since there are a ...

  8. express框架开发笔记

    1.express项目修改不重启 $ supervisor node bin/www 让supervisor监听模板文件的改动 $ supervisor --extensions html,css,j ...

  9. centos7 编译安装nginx1.16.0( 完整版 )

    一.安装依赖包 yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 依赖包说明: 1.编译 ...

  10. js时间日期格式

    Date.prototype.format = function(format){ var o = { "M+" : this.getMonth()+1, //month &quo ...