어떻게 버퍼에 다음 파일을 작성합니까


1

나는 matlab에서 일부 STL 데이터를 쓰려고하는데 MEX 파일 (C로 작성된 MATLAB DLL)을 작성하여이 작업을 수행하려고합니다. 나는 루프를 사용하여 stol 구문을 플로트로 작성하는 데이터를 처리한다.

...
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 Teaching Your Cody"를 읽었으며 645 페이지에서 버퍼를 사용하여 디스크에 쓰기 속도를 높이는 것에 대해 이야기합니다. 버퍼가 가득 차면 데이터를 쓰고 플러시 한 다음 다시 수행하십시오. 그들은 실제로 어떻게하는지에 대한 코드를 보여주지 않으며 C++의 스트림을 사용합니다.

C에서 어떻게 접근합니까? 난 그냥 고정 크기로 char * 버퍼를 만들고, 그때 어떻게 든 그것의 전체를 확인하고 fwrite()로 파일에 쓰기, 플러시, 다시 시작하겠습니까 ??

1

기본적으로 여러분 스스로하고 싶다면, 여러분이 작성한 것과 거의 똑같이 할 수 있습니다 : char* 버퍼를 만들고 그것에 넣은 문자 수를 세어 버퍼를 만들고 (또는 거의 가득 찬) 파일로 플러시하십시오.

그러나 일반적으로 C 스트림은 버퍼링에 문제가 없어야합니다. 함수를 사용하여이 버퍼링을 제어 할 수도 있습니다. setbuf et al.


1

fprintf는 자동으로 출력을 버퍼링합니다. 문제가 있으면 파일을 여는 코드 (fp)를 표시하십시오.