setvbuf

函数名: setvbuf

用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size);

type : 期望缓冲区的类型:

_IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。

_IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。

_IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。

size : 缓冲区内字节的数量。

注意:This function should be called once the file associated with the stream has already been opened but before any input or output operation has taken place.

意思是这个函数应该在打开流后,立即调用,在任何对该流做输入输出前

程序例编辑


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#include <stdio.h>

int main()

{

    FILE *input, *output;

    char bufr[512];

    input = fopen("file.in""r+b");

    output = fopen("file.out""w");

    /* set up input stream for minimal disk access,

    using our own character buffer */

    if (setvbuf(input, bufr, _IOFBF, 512) != 0)

        printf("failed to set up buffer for input file\n");

    else

        printf("buffer set up for input file\n");

    /* set up output stream for line buffering using space that

    will be obtained through an indirect call to malloc */

    if (setvbuf(output, NULL, _IOLBF, 132) != 0)

        printf("failed to set up buffer for output file\n");

    else

        printf("buffer set up for output file\n");

    /* perform file I/O here */

    /* close files */

    fclose(input);

    fclose(output);

    return 0;

}

时间: 2024-11-05 16:01:22

setvbuf的相关文章

关于setvbuf()函数的详解

为什么要使用setvbuf函数 如果你的内存足够大,可以把文件IO的BUF设置大一些,这样每次你用fopen/fread/fwrite/fscanf/fprintf语句的时候,都会在内存里操作,减少内存到磁盘IO读写的操作次数,提高系统效率. 如果你的程序的功能涉及到类似数据库.视频.音频.图像处理等大量需要爆发式磁盘到内存的IO情况下,可以考虑用setvbuf进行优化内存IO,其他情况下可以不考虑,LINUX/WINDOWS会自动处理这些问题. 功 能: 把缓冲区与流相关 用 法: int s

第四天-----文件位置函数和缓冲区刷新函数

/* 功能:设置文件偏移位置 参数1:FILE流 参数2:偏移量 参数3:偏移的位置:SEEK_SET, SEEK_CUR, SEEK_END 返回值:成功返回0,否则返回-1并设置errno*/ int fseek(FILE *stream, long offset, int whence); /* 功能:确定文件位置指针位置 参数1:FILE 流 返回值:文件位置指针的当前位置,否则返回-1,并设置errno*/ long ftell(FILE *stream); /* 功能:文件位置指针定

libevent学习一

首先,libevent是个什么东西呢?通过阅读:官网. libevent:一个事件通知库.libevent的API提供了一个可以执行回调函数的机制.这些事件可以是一个文件描述符或到达指定时间.而且,libevent也支持由signals或常规的timeout产生的回调. libevent是用来替代网络服务器上的时间循环的.一个程序只需要去调用event_dispatch()然后去动态的增加或删除事件,而不用去改变事件循环. 目前,libevent支持/dev/poll, kqueue(2), e

头文件&lt;stdio.h&gt;

头文件<stdio.h>声明了三种类型,一些宏和很多执行输入输出的函数.1.类型:FILE 它是一个对象类型,可以记录控制流需要的所有信息,包括它的文件定位符.指向相关的缓冲的指针.记录是否发生了读/写错误的错误指示符和记录文件是否结束的文件结束符.fpos_t 它是一个对象类型,可以唯一指定文件中的每一个位置所需的所有信息.size_t 这是无符号整数类型,它是sizeof关键字的结果.2.宏:NULL 这个宏是一个空指针常量的值._IOFBF._IOLBF.IONBF 这些宏扩展了带有特定

后台开发之IO缓冲区管理

Linux系统IO中write原型为  ssize_t write(int  filedes, const void * buff, size_t nbytes) ; 当调用write写数据的时候,调用完成后write直接返回,但是磁盘是个慢速设备,操作系统会将数据保存在内核中的缓冲区中,并负责异步地将数据写至磁盘.当然如果此时系统宕机了则会丢失数据.write是系统调用,每次调用都会陷入内核,所以选取一个合适的块长度buffsize,并尽量减少它的调用可以优化效率.在ANSI C的标准IO中我

c开源项目webbench学习

webbench是用c语言来实现的网站压力测试工具,可以并发产生3万个链接测试网站.在学习webbench时候最好先简单了解一下http协议,推荐小日本的一本书<图解http>,适合入门,图文并茂,先简单介绍下wenbench的使用方法,在ubuntu14.04上安装完后,执行: [email protected]:webbench-1.5# webbench  webbench [option]... URL   -f|--force               Don't wait for

文件输入/输出

fopen:打开文件.第一个参数文件名的字符串地址.打开模式:r:读 w:写,会改 没有就创建 a:追加 ,没有就创建 r+:读取和写入 w+:同上但会改 没有就创建a+:同上,但是追加 rb,wb,ab,ab+,a+b,wb+,w+b,ab+,a+b,使用二进制模式而不是文本模式打开,其他类似 getc():到达文件结尾时,会返回EOF putc() 与getchar().putchar类似但适用于文件 putc(ch,文件指针) fclose 关闭由指针fp指定的文件#include<std

XCode 遇到的问题

俗话说:工欲善其事必先利其器.抛弃了VS,投入XCode的怀抱.先不说两者的差距,还是先熟悉开发工具是关键.下面列出个人使用中遇到的一些问题. Problem1:修改Xcode字体颜色以及调整字体大小. 具体过程如下所示: 1. 点击Xcode--->Preference 2. 查看Fonts & Colors,根据个人喜好选择颜色搭配. 3. 选择主题为Civic 4. 点击Source Editor下面的某个如Plain Text或者Comments,之后按下Command+A,选择全部

C语言文件读写操作总结

C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了.当使用打开函数时,必须给出文件名.文件操作方式(读.写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头.若已有一个同名文件存在,则删除该文件,若无同名文件,则建立该文件,并将文件指针指向文件开头. fopen(char