2

私はmatlabからいくつかのSTLデータを書き込もうとしています.MEXファイル(Cで書かれたmatlab DLL)を書くことでこれをやろうとしています.フロートと。

...

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 a 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 に答える