2009-02-21 125 views
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)的代碼。