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


1

我想写一些STL数据出来的matlab,我试图通过编写一个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()将它写入一个文件,刷新它,重新开始?

1

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

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

来控制此缓冲

1

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