سؤال

فيما يتعلق بـ C ما هو روتين كعب؟ كما أن المثال سيكون موضع تقدير كبير أيضًا.

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

المحلول

يمكن أن يكون روتين كعب واحد من (على الأقل) شيئين.


أولاً ، يمكن أن يكون روتينًا للمكان الذي تقوم بتطويره بسرعة لاختبار روتين أعلى مستوى ، بقصد استبدال نسخة حقيقية لاحقًا. يتم استخدام هذا عادةً مع التطوير من أعلى إلى أسفل (ترميز المستويات العليا أولاً ثم تعمل في طريقك إلى الأشياء الأكثر تفصيلاً) ويمكن أن تكون بسيطة مثل:

int getCount (void) { return 7; } // just return fixed value for testing.

أو أكثر تعقيدًا قليلاً:

// Cycle through values for some variety.
int getCount (void) {
    int retvals[] = {2,7,1,8,2,8,1,8,2,8,4,5,9};
    static int pos = -1;
    pos = (pos + 1) % (sizeof (retvals) / sizeof (*retvals));
    return retvals[pos];
}

بالطبع ، بمجرد أن يصبح كعب الكعب معقدًا بما فيه الكفاية ، يمكنك أيضًا تنفيذ الشيء الحقيقي :-)


ثانياً ، يتم استخدامه بشكل شائع في بيئات استدعاء الإجراءات عن بُعد (RPC). يتم استخدام كوب هناك لإلغاء البيانات في أحد الطرفين وإبلاغها إلى خادم في الطرف الآخر.

تحتاج RPC إلى إنشاء وظائف كعب للعميل والخادم. إنه يشبه إلى حد كبير النموذج الأولي للدالة في C لكن النتيجة النهائية مختلفة قليلاً ، مثل:

+----------------+
| Client         |
|  +----------+  |  +---------------+
|  |   main   |  |  | Server        |
|  |----------|  |  |  +----------+ |
|  | stub_cli |------->| stub_svr | |
|  +----------+  |  |  |----------| |
+----------------+  |  | function | |
                    |  +----------+ |
                    +---------------+

في هذا المثال ، بدلاً من الاتصال function في نفس البرنامج ، main يستدعي وظيفة كعب العميل (بنفس النموذج الأولي كما function) وهو المسؤول عن تعبئة المعلومات والحصول عليها عبر السلك إلى عملية أخرى. يمكن أن يكون هذا هو نفس الجهاز أو آلة مختلفة ، فهذا لا يهم حقًا - إحدى مزايا RPC هي أن تكون قادرًا على نقل الخوادم في الإرادة.

في الخادم ، هناك عملية "مستمع" ستتلقى تلك المعلومات وتنقلها إلى الخادم. يتلقى كعب الخادم المعلومات ، ويقوم بفكها ويمررها إلى الوظيفة الحقيقية.

ثم تقوم الوظيفة الحقيقية بما تحتاجه والعودة إلى كعب الخادم الذي يمكنه حزم معلومات الإرجاع ونقلها إلى كعب العميل.

ثم يقوم العميل بتفريغ ذلك وينتقل إليه مرة أخرى main.

نصائح أخرى

إنها وظيفة بنفس توقيع الوظيفة الحقيقية ولكنها لا تفعل شيئًا ، ويمكن تجميعها وتنفيذها تمامًا مثل الشيء الحقيقي. على سبيل المثال

int MyStub(char * str)
{
    /* Stub - Does Nothing */

    return 0;
}

غالبًا ما يتم استخدامها كعناصر نائبة ، بحيث يمكن وضع بنية البرنامج بشكل عام أولاً ، ثم التفاصيل.

في رمز كوب اللغة C ، اتصل بالفعل بـ Main () ، وليس نظام التشغيل أو التحويل البرمجي.

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