Как вы пишете в буфер затем в файл


1

Я пытаюсь написать некоторые данные STL из Matlab, и я пытаюсь это сделать, написав MEX-файл (DLL, написанный на языке C), на данный момент У меня есть цикл, который просматривает мои данные, выписывая синтаксис stl с помощью float.

...

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 day», а на странице 645 они говорят об использовании буферов для ускорения записи на диск. Как только буфер заполнится, напишите данные, промойте его и сделайте снова. На самом деле они не показывают никакого кода о том, как это сделать, и это происходит с потоками C++.

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

1

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

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


1

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