设置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. 四:(之三)制作镜像和一些docker命令

    3.DIY image 3.1如何去掉sudo权限命令,让当前用户拥有操作docker的权限? 3.2 制作一个image: 拉取一个非常小的base image,hello-world.其中是一个可 ...

  2. iOS 统一配置

    1 .统一设置nav标题样式: - (void)_setNavigationTitle { NSDictionary *navigationParams = @{NSForegroundColorAt ...

  3. urllib 获取页面或发送信息

    #! /usr/bin/env python3 # -*- coding:utf-8 -*- #urllib提供了一系列用于操作URL的功能. #urllib的request模块可以非常方便地抓取UR ...

  4. jstree使用新的

    1.首先准备jstree树的dom元素 <p id="flowList_ul" class="flowList_ul"></p> 2.初 ...

  5. Cracking The Coding Interview4.5

    //原文: // // Write an algorithm to find the 'next' node (i.e., in-order successor) of a given node in ...

  6. Xilinx 7 series FPGA multiboot技术的使用(转)

    reference:https://www.cnblogs.com/chensimin1990/p/9067629.html 当升级程序有错误的时候,系统会启动golden bitstream 注意: ...

  7. android 广播 接收短信

    ; i < messages.length; i++) { SmsMessage ms = SmsMessage.createFromPdu((byte[])pdus[i]); String f ...

  8. java 设计模式参考资料

    参考博客 http://www.cnblogs.com/lin3615/p/3783272.html 设计模式之责任链模式http://www.cnblogs.com/draem0507/p/3784 ...

  9. shell连接ubuntu流程

    {ubuntu}下载 sudo apt-get install tasksel     {选择安装SSH server服务)[有些ubuntu默认是安装好ssh的,只是没有配置,和开启ssh服务] s ...

  10. VB播放声音

    公共Modules定义: Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ...