我正在尝试从 matlab 中写入一些 STL 数据,并且我正在尝试通过编写 MEX 文件(用 C 语言编写的 matlab DLL)来做到这一点目前我有一个循环正在通过我的数据写出带 float 的 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() 将其写入文件,刷新它,重新开始??
最佳答案
基本上,如果你想自己做,你会几乎完全按照你写的那样做:制作一个 char*
缓冲区,跟踪其中的字符数(通过计算你的字符数放入其中),如果它已满(或接近满),则将其刷新到文件中。
但是,对于 C 流来说这真的不是问题,因为它们通常会进行缓冲。您甚至可以使用函数 setbuf et al. 控制此缓冲
关于c - 你如何写入缓冲区然后写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573937/