문제

나는 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는 우리의 하루에 C ++를 가르치고 있습니다"라고 읽었고 645 페이지에는 버퍼를 사용하여 디스크에 쓰기 속도를 높이는 것에 대해 이야기합니다. 버퍼가 채워지면 데이터를 작성하고 플러시하고 다시 수행하십시오. 그들은 실제로 그것을하는 방법에 대한 코드를 실제로 보여주지 않으며 이것은 C ++의 스트림과 관련이 있습니다.

C에서 어떻게 접근합니까? 고정 된 크기의 char* 버퍼를 만들고 어떻게 든 가득 찬시기를 확인하고 fwrite ()가있는 파일에 작성하고 플러시하고 다시 시작합니까 ??

도움이 되었습니까?

해결책

기본적으로, 당신은 직접하고 싶어한다, 당신은 당신이 쓴대로 거의 정확하게 할 것입니다 : char* 버퍼, 숯의 수를 추적하고 (입력 한 숯을 계산하여) 가득 차 (또는 거의 가득한) 파일로 플러시하는 경우.

그러나 이것은 일반적으로 버퍼링을 수행하기 때문에 실제로 C 스트림에서 문제가되지 않아야합니다. 기능 으로이 버퍼링을 제어 할 수도 있습니다 Setbuf et al.

다른 팁

FPRINTF는 자동으로 버퍼링 된 출력을 수행합니다. 문제가있는 경우 파일 (FP)을 엽니 다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top