我正在尝试用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()将其写入文件,刷新它,重新开始?
答案 0 :(得分:1)
fprintf会自动为您缓冲输出。如果出现问题,请向我们展示打开文件的代码(fp)。
答案 1 :(得分:1)
基本上,你想自己做,你几乎就像你写的那样做:创建一个char*
缓冲区,跟踪其中的字符数(通过计算你放入的字符数)如果它已满(或接近满),请将其刷新到文件中。
然而,这应该不是C流的问题,因为它们通常会进行缓冲。您甚至可以使用函数setbuf et al.
来控制此缓冲