设置stdio流缓冲模式

#include<stdio.h>
int setvbuf(FILE *stream,char *buf,int mode,size_t size)
int setbuf(FILE *stream,char *buf)//该函数不返回函数结果
int setbuffer(FILE *stream,char *buf,size_t size)//类似setbuf函数只是允许指定缓冲区大小

其中mode的值可为

_IONBF不进行缓冲直接读写

_IOLBF进行行缓冲

_IOFBF进行全缓冲

调用函数出错返回非零值

刷新stdio缓冲区

int fflush(FILE *stream)    //刷新到内核缓冲区,若参数为NULL,刷新全部缓冲区

用于控制文件I/O内核缓冲的系统调用

#include<stdio.h>
int fsync(int fd)//所有元数据刷新到磁盘
int fdatasync(int fd)//只刷新数据到磁盘,元数据不刷新(例如最近更改时间等等属性)
void sync(void) //刷新所有数据(包括数据块,元数据等)

混合使用库函数和系统调用进行文件I/O

int fileno(FILE *stream)//该函数用于获取文件流相对应的文件描述符,成功返回文件描述符失败返回-1
FILE *fdopen(int fd,const char *mode)//该函数功能是根据文件描述符返回文件流,成功返回文件指针,失败返回NULL,mode可以为r,w,a等

就I/O模式相内核提出建议

#include<fcntl.h>
int posix_fadvise(int fd,off_t offset,off_t len,int advice)

fd文件描述符,offset起始位置,len长度

成功返回0,失败返回一个负数

其中advice参数可以是:

POSIX_FADV_NORMA 无特别建议,文件预读窗口大小为默认值128kb

POSIX_FADV_SEQUENTIAL 进程估计会从低偏移量到高偏移量顺序读取数据,文件预读窗口大大小为默认值两倍

POSIX_FADV_RANDOM 随机顺序访问数据,在linux中该选项会禁用文件预读

POSIX_FADV_WILLNEED 预计不久就会用到,将数据填充到缓冲区高速缓存中,后续对该文件的读取就会直接从高速缓存中读取数据即可

POSIX_FADV_DONTNEED 在不久的将来不会访问指定的文件区域,释放相关的高速缓存页面(如果存在的话)

POSIX_FADV_NOREUSE 一次性访问指定文件区域,不再复用,访问一次后即可释放页面

文件I/0缓冲的更多相关文章

  1. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  2. python 之 文件I/0

    打开和关闭文件 open()函数 必须要open()内置函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. 语法 file object=open(file_name [,acc ...

  3. java——io、字节流缓冲区拷贝文件、字节缓冲流

    使用try catch finally关闭文件流: 写入文件: import java.io.*; public class exp{ public static void main(String[] ...

  4. Java文件与io——缓冲流

    对文件或其它目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来. BufferedInputStream:为另一个输入流添加 ...

  5. properties文件使用{0}...

    例如properties文件的配置 weixin.token.url=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credent ...

  6. Java基础之写文件——使用带缓冲的Writer写文件(WriterOutputToFile)

    控制台程序,将一列字符串写入到文件中. import java.io.*; import java.nio.file.*; import java.nio.charset.Charset; publi ...

  7. 防火墙导致FTP传输文件为0

    在使用 ftpClient 传输文件到FTPserver时,在别的机器上可以正常使用,但是到自己的机器有就始终是0文件,发现是Mcafee 防火墙导致的,只要让防火墙放行即可. Mcafee防火墙的放 ...

  8. 文件 I/O缓冲流

    import java.io.File; import java.io.Writer; import java.util.StringTokenizer; import java.io.Reader; ...

  9. eclipse memory analyzer对系统内存溢出堆文件解析0(转)

    前言 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的.所以找出是什么原因造成OutOfMemoryError非常重要.现 ...

随机推荐

  1. xml文档的读取

    #! /usr/bin/env python3 # -*- coding:utf-8 -*- import xml.dom.minidom  #该模块被用来处理xml文件 #打开xml文档 dom=x ...

  2. ubuntu 命令行卸载并清理软件

    1.删除软件 方法一.如果你知道要删除软件的具体名称,可以使用 sudo apt-get remove --purge 软件名称 sudo apt-get autoremove --purge 软件名 ...

  3. Linux学习 :多线程编程

    1.Linux进程与线程() 进程:通过fork创建子进程与创建线程之间是有区别的:fork创建出该进程的一份拷贝,创建时额外申请了新的内存空间以及存储代码段.数据段.BSS段.堆.栈空间,     ...

  4. VCL界面控件DevExpress VCL发布v18.2.2|附下载

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  5. CSS学习笔记-01-2D转换模块

    首先,mark 一下  css3 新增 的 2D 转换之 W3school 的链接: http://www.w3school.com.cn/css3/css3_2dtransform.asp 转换是使 ...

  6. Ajax的返回状态码(status)

    XMLHttpRequest.status: 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx-成功 ...

  7. 在html5中不支持<table>的cellpadding 和 cellspacing ; 2) 如何用css实现 cellpadding, cellspacing ; 3) tr , th 是 有 border, 没有 padding 的.

    1.初始: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. Beta阶段冲刺---Day2

    一.Daily Scrum Meeting照片 二.今天冲刺情况反馈 1.昨天已完成的工作· 题目切换的改进· 支持退格操作 2.今天计划完成的工作· 数字以扑克牌的形式给出· 答案的乘除符号与游戏中 ...

  9. 解决java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor问题

    hibernate整合spring当在spring配置文件中加入如下代码 <!--2.配置事务属性,需要事务管理器--> <tx:advice id="txAdvice&q ...

  10. outlook2016中如何设置两个账户都自动有各自默认签名

    安装了Outlook2016以后,有些朋友不清楚,我们在发送邮件的时候,怎么添加邮件签名,其实在Outlook2016中添加邮件签名的方法也是比较简单的,这里小编介绍下在Outlook2016中设置添 ...