Pergunta

Eu estou tentando escrever alguns dados STL fora do Matlab e estou tentando fazer isso escrevendo um arquivo MEX (a DLL Matlab escrito em C) No momento eu tenho um loop apenas passando meus dados escrevendo para fora a sintaxe stl com os carros alegóricos.

...

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;
    }

}

...

A principal razão pela qual eu quero fazer isso em um arquivo MEX é porque as coisas são a maneira mais rápida desde a sua compilado. Eu estava lendo um livro C ++, "Sams Teach Yourself C ++ in One nosso um dia" e na página 645 eles falam sobre como usar um buffers para acelerar a escrita para o disco. Uma vez que o buffer enche, escrever os dados, lave-lo, e fazê-lo novamente. Eles realmente não mostram qualquer código sobre como fazer isso e isso é com fluxos de C ++.

Como eu poderia abordar esta em C? Será que eu apenas fazer um char * buffer com um tamanho fixo, e, em seguida, de alguma forma verificar quando o seu pleno e escrevê-lo para um arquivo com fwrite (), lave-lo, começar de novo ??

Foi útil?

Solução

Basicamente, de você quiser fazê-lo sozinho, você faria isso quase exatamente como você escreveu: Faça um tampão char*, controlar o número de caracteres nele (contando os caracteres que você colocar nele) e, se for completa (ou quase completo), lave-lo para o arquivo.

No entanto, este deve realmente não ser um problema com córregos C, como costumam fazer buffering. Você pode até mesmo controlar este buffer com a função setbuf et al.

Outras dicas

fprintf não tamponada saída automaticamente para você. Se há um problema, mostra-nos o código que abre o arquivo (fp).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top