سؤال

وأود أن تمرير مؤشر (أنا أضع ملف مع البيانات في الذاكرة مع mmap) لعمليات لدت باستخدام شوكة + إكسيك، ولكن أنا عالقة على كيفية تمرير مؤشر إلى إكسيك () عملية لدت؟

وUPDATE1:

وشكرا لمدخلات الخاص، وأنا لا تستخدم الذاكرة المشتركة إنشائه مع mmap مع العلم MAP_INHERIT:

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

المصدر: HTTP: // شبكة الاتصالات العالمية. uwm.edu/cgi-bin/IMT/wwwman؟topic=exec(2)&msection=

وUPDATE2:

وهذا هو الواجب المنزلي توفيرنا، ولكن أعتقد أنني يجب التوقف عن التفكير مؤشرات والتفكير في IPC نفسها. اعتقد انني سوف تذهب مع محاولة mmap نفس الملف في عملية طفل.

والمثال رمز قصير محل تقدير كبير.

وشكرا مقدما لمساعدتكم.

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

المحلول

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

إذا كنت لا تستخدم الذاكرة المشتركة، لا يمكنك تبادل مؤشرات من أي نوع: إن عملية أخرى لن تكون قادرة على الوصول إلى الذاكرة العملية الخاصة بك.

نصائح أخرى

وهذا لا يمكن أن تنجح. عملية جديدة يجب mmap الملف نفسه كذلك.

وعملية ولدت ربما يجب فتح الأنابيب إلى عملية الأصل وطلب البيانات التي يحتاجها لتعيين شريحة الذاكرة المشتركة.

وبدلا من ذلك يمكنك استخدام دفعة :: بين العمليات لخلق شريحة الذاكرة المشتركة بالنسبة لك وتمرير الواقع حول عنوان (يمكن أن تفعله التعيين). كنت لوحدك قراءة هذا التوثيق على الرغم من: HTTP: / /www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html

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

ومجرد تمرير كنص في وسيطة سطر الأوامر، أو في متغير البيئة.

وهذه منطقة كبيرة، وكان لديك الكثير للاختيار من بينها.

ومفتاح إيجاد تلك الحلول هو للبحث عن شيء من هذا القبيل <لأ href = "http://www.google.se/search؟hl=en&safe=off&client=firefox-a&rls=com.ubuntu٪3Aen-GB٪3Aunofficial&hs = 4zp والأسطوانات = 20 & ف = لينكس + بين + معالج + الاتصالات وbtnG = بحث "يختلط =" نوفولو noreferrer "> لينكس بين الاتصالات معالج أو ربما <لأ href =" http://www.google.se/search؟hl = أون وآمنة = إيقاف والعميل = فايرفوكس واحد وريال = com.ubuntu٪ 3Aen-GB٪ 3Aunofficial والنظام المنسق = RKV والأسطوانات = 20 & ف = لينكس + IPC وbtnG = بحث "يختلط =" نوفولو noreferrer "> لينكس IPC .

ويمكن أيضا العثور على مقدمة إلى IPC في كتب مثل، تقدم برمجة لينكس (ISBN: 0-7357-1043-0)

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