fopen的默认缓冲大小和setvbuf 用法

《unix环境高级编程》是这么说的:

标准IO流操作读写普通文件是使用全缓冲的,默认缓冲区长度是该文件系统优先选用的IO长度(从stat结构得到的st_blksize值)

//读取st_blksize的例子:

int main(int argc, char* argv[])
{
    if(argc!=2)
    {
        printf("2 argment\n");
        return 0;
    }

    struct stat buf;
    stat(argv[1], &buf);
    printf("st_blksize=%d,st_blocks=%d\n", (int)buf.st_blksize, (int)buf.st_blocks);
    
    return 0;
}

setvbuf 用法:
语法: #include <stdio.h>

int setvbuf( FILE *stream, char *buffer, int mode, size_t size );

Parameters
stream
Pointer to FILE structure.

buffer
User-allocated buffer.

mode
Mode of buffering.

size
Buffer size in bytes. Allowable range: 2 <= size <= INT_MAX (2147483647). Internally, the value supplied for size is rounded down to the nearest multiple of 2.

函数setvbuf()设置用于stream(流)的缓冲区到buffer(缓冲区),其大小为size(大小). mode(方式)可以是:

_IOFBF, 表示完全缓冲
_IOLBF, 表示线缓冲
_IONBF, 表示无缓存

程序例:


/* setvbuf example */
#include <stdio.h>

char sBuf[1024];

int main ()
{
FILE *pFile;
pFile=fopen ("myfile.txt","w");
setvbuf ( pFile , sBuf, _IOFBF , 1024 );

// File operations here
fclose (pFile);
return 0;
}
在这个例子中,每次写1024字节,所以只有缓冲区满了(有1024字节),才往文件写入数据,可以减少IO次数

转载于:https://www.cnblogs.com/GoodGoodWorkDayDayUp/archive/2011/07/18/2109347.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值