你如何写入缓冲区然后写入文件

时间:2009-02-21 23:43:03

标签: c matlab buffer mex

我正在尝试用matlab编写一些STL数据,我试图通过编写一个MEX文件(一个用C语言编写的matlab DLL)来实现这一点。目前我有一个循环只是通过我的数据写出来使用浮点数的stl语法。

...

for(m=0;m<colLen;m++)
{

    res = m % 3;
    if(res == 0)
    {   
        fprintf(fp, "\tfacet normal %f %f %f \n",
                normalValues[(x*nvcolLen)+0], normalValues[(x*nvcolLen)+1], normalValues[(x*nvcolLen)+2]);
        fprintf(fp,"\t\touter loop\n" );
        flag = 0;
        x++;
    }


    fprintf(fp, "\t\t\tvertex ");

    for(n=0;n<rowLen;n++)
    {
        fprintf(fp, "%f ", xValues[m*rowLen+n]);

    }

    fprintf(fp,"\n");

    flag++;

    if (flag == 3)
    {
        fprintf(fp, "\t\tendloop\n\tendfacet\n");
        flag = 0;
    }

}

...

我想在MEX文件中执行此操作的主要原因是因为编译后事情会更快。我正在阅读一本C ++书籍,“Sams每天在一个人中自学C ++”,在第645页,他们讨论了使用缓冲区加速写入磁盘的问题。缓冲区填满后,写入数据,冲洗并再次执行。他们并没有真正展示如何做到这一点的任何代码,这与C ++的流有关。

我如何在C中处理此问题?我只是制作一个固定大小的char *缓冲区,然后以某种方式检查它是否已满并使用fwrite()将其写入文件,刷新它,重新开始?

2 个答案:

答案 0 :(得分:1)

fprintf会自动为您缓冲输出。如果出现问题,请向我们展示打开文件的代码(fp)。

答案 1 :(得分:1)

基本上,你想自己做,你几乎就像你写的那样做:创建一个char*缓冲区,跟踪其中的字符数(通过计算你放入的字符数)如果它已满(或接近满),请将其刷新到文件中。

然而,这应该不是C流的问题,因为它们通常会进行缓冲。您甚至可以使用函数setbuf et al.

来控制此缓冲