2

我正在尝试从 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 Teach Yourself C++ in One our day”,在第 645 页中,他们谈到了使用缓冲区来加快写入磁盘的速度。一旦缓冲区填满,写入数据,刷新它,然后再做一次。他们并没有真正展示任何关于如何做到这一点的代码,这是使用 C++ 的流。

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

4

2 回答 2

1

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

于 2009-02-21T23:48:53.747 回答
1

基本上,你想自己做,你几乎完全按照你写的那样做:制作一个char*缓冲区,跟踪其中的字符数(通过计算你放入其中的字符)以及它是否已满(或几乎-full),将其刷新到文件中。

但是,这对于 C 流来说应该不是问题,因为它们通常会进行缓冲。您甚至可以使用函数setbuf 等来控制这种缓冲。

于 2009-02-21T23:53:49.073 回答