为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用FILE *写入内存缓冲区?

如何使用FILE *写入内存缓冲区?

C++ C
慕妹3146593 2019-12-02 10:55:03
有什么方法可以将内存缓冲区创建为FILE *。在TiXml中,它可以将xml打印到FILE *,但是我似乎无法使其打印到内存缓冲区。
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

有一种使用内存作为FILE描述符的POSIX方法:fmemopen或open_memstream,具体取决于您要使用的语义:fmemopen和open_memstream之间的区别


查看完整回答
反对 回复 2019-12-02
?
茅侃侃

TA贡献1842条经验 获得超21个赞

我猜正确的答案是凯文。但是这里有一个使用FILE *的技巧。请注意,如果缓冲区大小(此处为100000)太小,则会丢失数据,因为刷新缓冲区时会将其写出。另外,如果程序调用fflush(),则会丢失数据。


#include <stdio.h>

#include <stdlib.h>


int main(int argc, char **argv)

{

    FILE *f = fopen("/dev/null", "w");

    int i;

    int written = 0;

    char *buf = malloc(100000);

    setbuffer(f, buf, 100000);

    for (i = 0; i < 1000; i++)

    {

        written += fprintf(f, "Number %d\n", i);

    }

    for (i = 0; i < written; i++) {

        printf("%c", buf[i]);

    }

}


查看完整回答
反对 回复 2019-12-02
?
狐的传说

TA贡献1804条经验 获得超3个赞

我写了一个简单的示例,说明如何创建内存文件:


#include <unistd.h> 

#include <stdio.h> 


int main(){

  int p[2]; pipe(p); FILE *f = fdopen( p[1], "w" );


  if( !fork() ){

    fprintf( f, "working" );

    return 0;

  }


  fclose(f); close(p[1]);

  char buff[100]; int len;

  while( (len=read(p[0], buff, 100))>0 )

    printf(" from child: '%*s'", len, buff );

  puts("");

}


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 915 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信