Я пытаюсь записать некоторые данные 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 (), очищать его, начинать заново ??