سؤال

لم يسبق لي أن كتبت أي IPC C++ على Linux من قبل.

مشكلتي هي أنه سيكون لدي العديد من العملاء (الكتاب)، وخادم واحد (قارئ).كل هذه ستكون على نفس الجهاز.سيقوم الكتّاب بتسليم أجزاء من البيانات (سلسلة/بنية) إلى القارئ.سيقوم القارئ بعد ذلك بقراءتها في FIFO ويفعل شيئًا بها.

أنواع IPC على Linux هي إما أنابيب أو مآخذ توصيل/قوائم انتظار الرسائل بقدر ما أستطيع أن أقول.

كنت أتساءل فقط عما إذا كان يمكن لأي شخص أن يوصيني بالطريق الذي أسلكه.أنا أميل نحو المقابس، لكن ليس لدي أي أساس حقيقي لذلك.هل هناك أي شيء يجب أن أقرأه/أفهمه قبل الشروع في هذه الرحلة؟

شكرًا

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

المحلول

والقضية الرئيسية يجب عليك أن تنظر ما هو نوع البيانات التي يتم تمريرها حيث سيؤدي ذلك في جزء تحديد خياراتك. يأتي هذا إلى ما إذا كان يحدها البيانات الخاصة بك أم لا. إذا لم يتم يحدها ثم شيئا تيار المنحى مثل FIFOs أو مآخذ مناسبة. إذا كان فإنك قد الاستفادة بشكل أفضل من الأشياء مثل MQS أو الذاكرة المشتركة. منذ كنت أذكر كل من السلاسل والبنيات فمن الصعب أن نقول ما هو مناسب في حالتك، على الرغم من إذا يحدها سلاسل الخاص بك في غضون بعض أقصى معقول يمكنك استخدام أي شيء مع بعض تافه طفيفة.

والثاني هو السرعة. أنه لن تكون هناك إجابة صحيحة تماما لذلك ولكن عموما يذهب شيء من هذا القبيل: الذاكرة المشتركة، مكس، FiFOs، مآخذ المجال مآخذ شبكة

ووالثالث هو سهولة الاستخدام. الذاكرة المشتركة هي أكبر PITA لأن لديك للتعامل مع تزامن الخاصة بك. أنابيب من السهل طالما تبقى أطوال الرسالة أدناه حجم PIPE_BUF. نظام التشغيل يتعامل مع أكثر من الصداع مع مكس. مآخذ من السهل بما فيه الكفاية ولكن لديك النمطي الإعداد.

وأخيرا العديد من آليات IPC على حد سواء POSIX وSYSV المتغيرات. عموما POSIX هو الطريق للذهاب إلا إذا كان نوع SYSV بعض ميزة كنت حقا تحتاج أو تريد.

وتحرير: الجواب Count0 في ذكرتني التي قد تكون مهتمة في شيء أكثر تجريدا ومستوى أعلى. بالإضافة إلى ACE يمكنك إلقاء نظرة على بوكو . وبطبيعة الحال، لا SO إجابة كاملة إذا كان لا يذكر <لأ href = "http://www.boost.org/doc/libs/1_35_0/doc/html/interprocess.html" يختلط = "نوفولو noreferrer "> زيادة في مكان ما.

نصائح أخرى

ونظام V IPC هو ذكي إلى حد ما استخدام إنما هو ناضجة، تكنولوجيا قوية. أن قوائم انتظار الرسائل ربما تفعل ما تريد ودعم الذري الطابور / دي الطابور.

والمقابس هي سهلة الاستخدام وأيضا دعم الاتصالات عبر شبكة اتصال. ومع ذلك، فإنها لا تفعل أي الطابور، لذلك سيكون لديك لكتابة التعليمات البرمجية إدارة الصف في الخادم الخاص بك. باستخدام مآخذ مع C ++ لا تختلف إلى حد كبير لاستخدامها مع C. هناك الكثير من الأدلة لذلك على شبكة الإنترنت، وكتب مثل ستيفنز "البرمجة شبكة يونكس (المجلد 1)" التي تغطي هذا الموضوع بشيء من التعمق.

ومكان جيد للحصول على قدميك الرطب هو هذا مآخذ تعليمي .

وبعد ذلك سيكون عليك أن العظام حتى على المواضيع وكائنات المزامنة و < وأ href = "http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html" يختلط = "نوفولو noreferrer"> هنا .

ومع ما ورد أعلاه كنت كل مجموعة لبدء اللعب؛ -)

وعلى الرغم من أنك قد لا طلب الكتب، ولأن الإجابات المذكورة أعلاه على ما يرام، وانا ذاهب فقط أن أقترح عليك الحصول على يديك على نسخ من هذه المجلدات اثنين:

وشبكة UNIX برمجة، المجلد 2، الطبعة الثانية: بين العمليات الاتصالات، W. ريتشارد ستيفنز

والبرمجة المتقدمة في بيئة UNIX، الطبعة الثانية، W. ريتشارد ستيفنز وستيفن A. راجو

وهناك الإضافية التي لا مفر منها والرافضة مع هذا النوع من الترميز، وهذين الكتابين تساعدك من خلال مهما الارتباك واجهتك.

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

خصوصاً Ace_Task باستخدام قائمة انتظار الرسائل السماح للقيام بما تحتاجه.

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