返回信息流大家有没有试过直接操作文件缓冲区?就像这样:
FILE *tempfile;
char buf[1280]={0};
int i=0;
tempfile=fopen("d:\\temp\\test.txt","wb");
setvbuf(tempfile,buf,_IOFBF,1280);
for(i=0;i<1280;i++)buf[i]=i%256;
fclose(tempfile);
用setvbuf可以为文件指定一个缓冲区,而不是用打开文件时系统分配的。我想直接操作文件缓冲区可以提高速度。
上面这段代码可以编译运行,但运行以后test.txt是空的(零字节)。
是不是这样,虽然自己向缓冲区写内容了,但操作系统没有收到对文件进行写操作的指令,不执行。
这是一条镜像帖。来源:北邮人论坛 / cpp / #14758同步于 2008/10/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
直接操作文件缓冲区
erabbit
2008/10/27镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
问题解决了,可以通过修改FILE结构体中的变量实现:
int main(int argc,char *argv[])
{
FILE *tempfile;
char buf[1280]={0};
int i=0;
for(i=0;i<1280;i++)buf[i]=i%256;
tempfile=fopen("d:\\temp\\test.txt","wb");
setvbuf(tempfile,buf,_IOFBF,1280);
tempfile->_cnt-=1024;
tempfile->_ptr+=1024;
fclose(tempfile);
}
直接写文件缓冲区。
PS:
IDE: Dev-C++ 4.9.9.2
不同平台FILE结构体的定义不一样。
【 在 erabbit 的大作中提到: 】
: 大家有没有试过直接操作文件缓冲区?就像这样:
: FILE *tempfile;
: char buf[1280]={0};
: ...................
学习了
【 在 erabbit (兔子|Tom) 的大作中提到: 】
: 问题解决了,可以通过修改FILE结构体中的变量实现:
: int main(int argc,char *argv[])
: {
: ...................
【 在 erabbit 的大作中提到: 】
: 问题解决了,可以通过修改FILE结构体中的变量实现:
: int main(int argc,char *argv[])
: {
: ...................
运行结果杂是这样?
*
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆�����氨渤吹斗腹夯冀究懒旅呐魄壬仕掏蜗醒矣哉肿刭谯茌捱噌忏溴骁栝觌祉铒瘃蝮趱鲼��������
*
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆�����氨渤吹斗腹夯冀究懒旅呐魄壬仕掏蜗醒矣哉肿刭谯茌捱噌忏溴骁栝觌祉铒瘃蝮趱鲼��������
*
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆�����氨渤吹斗腹夯冀究懒旅呐魄壬仕掏蜗醒矣哉肿刭谯茌捱噌忏溴骁栝觌祉铒瘃蝮趱鲼��������
*
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆�����氨渤吹斗腹夯冀究懒旅呐魄壬仕掏蜗醒矣哉肿刭谯茌捱噌忏溴骁栝觌祉铒瘃蝮趱鲼��������
【 在 wwwking 的大作中提到: 】
: tempfile->_cnt-=1024;
: tempfile->_ptr+=1024;
: 弱问一下这两句是啥意思,为啥是1024啊
有人注释下最后几句么?
还是有点看不懂