ماذا يحدث لجدول واصف الملف في العملية الأصلية بعد استدعاء dup2 وexecvp في العملية الفرعية؟

StackOverflow https://stackoverflow.com//questions/25050117

  •  21-12-2019
  •  | 
  •  

سؤال

أقوم بترميز برنامج Shell بسيط ولكني غير متأكد مما يحدث لجدول واصف الملف بعد dup2() و execvp.لذلك لدي عملية أصل تنتظر انتهاء العملية الفرعية (waitpid) ولكن عندما تتكرر لانتظار إدخال المستخدم التالي، فكيف لا يستمر جدول واصف الملف الذي قمت بتعديله باستخدام dup2 في العملية الفرعية في العملية الأصلية؟هل هذا بسبب قيام execvp بإعادة تعيين جدول واصف الملف إلى الأصل؟

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

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

المحلول

لا شئ.تحصل العملية الفرعية على نسخة من واصفات الملف الأصلي عند إنشائها بواسطة fork(), ، لكن التغييرات التي يتم إجراؤها بعد ذلك لا تتم مشاركتها مرة أخرى مع الوالدين.

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

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