文件I/0缓冲
设置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缓冲的更多相关文章
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
- python 之 文件I/0
打开和关闭文件 open()函数 必须要open()内置函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. 语法 file object=open(file_name [,acc ...
- java——io、字节流缓冲区拷贝文件、字节缓冲流
使用try catch finally关闭文件流: 写入文件: import java.io.*; public class exp{ public static void main(String[] ...
- Java文件与io——缓冲流
对文件或其它目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来. BufferedInputStream:为另一个输入流添加 ...
- properties文件使用{0}...
例如properties文件的配置 weixin.token.url=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credent ...
- Java基础之写文件——使用带缓冲的Writer写文件(WriterOutputToFile)
控制台程序,将一列字符串写入到文件中. import java.io.*; import java.nio.file.*; import java.nio.charset.Charset; publi ...
- 防火墙导致FTP传输文件为0
在使用 ftpClient 传输文件到FTPserver时,在别的机器上可以正常使用,但是到自己的机器有就始终是0文件,发现是Mcafee 防火墙导致的,只要让防火墙放行即可. Mcafee防火墙的放 ...
- 文件 I/O缓冲流
import java.io.File; import java.io.Writer; import java.util.StringTokenizer; import java.io.Reader; ...
- eclipse memory analyzer对系统内存溢出堆文件解析0(转)
前言 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的.所以找出是什么原因造成OutOfMemoryError非常重要.现 ...
随机推荐
- Docker的安装以及使用Docker安装jenkins,gogs,tomcat(一)
(1)Docker的安装 官网安装链接 :https://yeasy.gitbooks.io/docker_practice/content/ 卸载旧版本 旧版本的 Docker 称为 docker ...
- 每天CSS学习之box-shadow
box-shadow是CSS3的属性,目的是给盒子添加一个或多个阴影.怎么感觉有点像光明使者使用该法术照亮敌人的阴暗面? box-shadow一共有六个属性,请看: box-shadow: h-sha ...
- transiton,transform,animation,border-image
animation,transition,transform三者联系与区别: https://www.jianshu.com/p/0e0e1903b80d transform: 使用小技巧: tran ...
- Linux7 下重新安装YUM
所有操作均在ROOT用户下,系统版本是Linux7.0 X86_64: 一.删除原有YUM # rpm -aq|grep yum|xargs rpm -e --nodeps 二.下载yum,注意自己的 ...
- FPGA中IBERT核的应用(转)
https://wenku.baidu.com/view/50a12d8b9ec3d5bbfd0a74f7.html (必看) 摘要 IBERT即集成式比特误码率测试仪,是Xilinx专门用于具 ...
- 实现简单的shell sed替换功能
通过脚本传参数可以实现替换 # -*-coding:utf-8-*- # Author:sunhao import sys f = open('yesterday','r',encoding='utf ...
- jsp连接java类出问题
问题:UserBean cannot be resolved to a type 解决: (1)jdk不匹配(或不存在) 项目指定的jdk为“jdk1.6.0_18”,而当前eclipse使用 ...
- Nodejs安装express提示不是内部或外部命令
安装nodejs安装包后,通过npm安装express后,运行express提示" express"不是内部或外部命令. c:\express -t ejs web 原因是版本问题 ...
- 再谈kbmMW垃圾回收
很早就写了关于kbmMW Server如何实现的垃圾回收,但最近一段时间还是为此遇到问题,实现的Server不能稳定运行,发生问题后不响应客户端的查询请求,在客户端得到服务端返回地址错误信息,只能重启 ...
- mysql主从复制-读写分离-原理
Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制 ...