Как вы пишете в буфер, а затем в файл - PullRequest
1 голос
/ 22 февраля 2009

Я пытаюсь записать некоторые данные STL из Matlab, и я пытаюсь сделать это, написав MEX-файл (DLL-библиотека Matlab, написанная на C). В настоящий момент у меня есть цикл, который просто проходит через мои записи синтаксис 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 ++ «Самс научи себя C ++ за один день», и на странице 645 они рассказывают об использовании буферов для ускорения записи на диск. Когда буфер заполнится, запишите данные, очистите их и повторите. На самом деле они не показывают никакого кода о том, как это сделать, и это с потоками C ++.

Как бы я подошел к этому в C? Буду ли я просто создавать буфер char * с фиксированным размером, а затем каким-то образом проверять его заполненность и записывать его в файл с помощью fwrite (), очищать его, начинать заново ??

Ответы [ 2 ]

1 голос
/ 22 февраля 2009

По сути, если вы хотите сделать это самостоятельно, вы бы сделали это почти точно так, как написали: создайте буфер char*, отследите количество символов в нем (подсчитав введенные в него символы), и если он полон (или почти полон), сбросьте его в файл.

Однако это не должно быть проблемой для потоков C, так как они обычно делают буферизацию. Вы даже можете управлять этой буферизацией с помощью функции setbuf и др.

1 голос
/ 22 февраля 2009

fprintf автоматически делает буферизованный вывод для вас. Если есть проблема, покажите нам код, который открывает файл (fp).

...