سؤال

أحاول كتابة بعض بيانات STL من Matlab وأنا أحاول القيام بذلك عن طريق كتابة ملف MEX (مكرر MALAB مكتوب في ج) في الوقت الحالي، لدي حلقة تمر عبر بيانات 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 ++، "SAMS Teach نفسك C ++ في واحد لدينا في اليوم" وفي الصفحة 645 يتحدثون عن استخدام المخازن المؤقتة لتسريع الكتابة إلى القرص. بمجرد ملء المخزن المؤقت، اكتب البيانات، قم بتسليمها، وتفعل ذلك مرة أخرى. إنهم لا يظهرون حقا أي رمز حول كيفية القيام بذلك وهذا مع تدفقات C ++.

كيف يمكنني التعامل مع هذا في ج؟ هل سأجعل فقط char * مخزن مؤقت بحجم ثابت، ثم تحقق بطريقة أو بأخرى عندما تكون ممتلئا وكتابتها إلى ملف مع FWWRITE ()، هل يبدأ تشغيله؟

هل كانت مفيدة؟

المحلول

أساسا، من أنت تريد أن تفعل ذلك بنفسك، كنت تفعل ذلك تماما كما كتبت: char* المخزن المؤقت، تتبع عدد الأحرف الموجودة فيه (عن طريق حساب الأحرف التي وضعتها فيها) وإذا كانت كاملة (أو كاملة تقريبا)، فقم بتسليمها إلى الملف.

ومع ذلك، يجب أن يكون هذا حقا مشكلة مع تدفقات C، لأنها عادة ما تفعل التخزين المؤقت. يمكنك حتى التحكم في هذا التخزين المؤقت مع الوظيفة Setbuf et al.

نصائح أخرى

FPRINTF يقوم بإخراج مخزنة تلقائيا لك. إذا كانت هناك مشكلة، فقم بإظهار الكود الذي يفتح الملف (FP).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top