سؤال

لدي أدنى شك @ تخزين وسيطات سطر الأوامر.

myprog.exe -cfgfile myConfig.cfg

يتم تمرير ARGS لخط الأوامر عند إنشاء العملية ، هل يتم تخزينها خارج العملية؟

أين يخزنها OS؟

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

المحلول

بالنسبة لنظام التشغيل Windows ، يتم الاحتفاظ بوسائط سطر الأوامر في كتلة بيئة العملية (PEB) ، والتي يتم تخصيصها في مساحة عنوان عملية المستخدم عند إنشاء العملية.

يمكنك قراءة Windows Internals لمزيد من التفاصيل. ها هو مقتطف من الفصل 5 - العمليات والموضوعات والوظائف.

أفترض أنه هو نفسه بالنسبة لنكهات UNIX. يجب أن تكون هذه البيانات في ذاكرة العملية ، بحيث يمكن الوصول إليها من خلال العملية نفسها.

نصائح أخرى

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

فقط بعد انتهاء هذه المهام ، يسمح نظام التشغيل بتنفيذ العملية.

يتم تخزين وسيطات سطر الأوامر في مساحة ذاكرة التطبيق. بالضبط حيث يختلف من نظام التشغيل إلى نظام التشغيل ، أعتقد أنه عادة ما يذهب في أسفل الكومة. الكود الذي يضعه في رمز مصدر kernel لـ exec على OSS يشبه UNIX ، لست متأكدًا من مكان وجوده في Windows (لا يمكنك رؤية المصدر على أي حال). رمز وقت التشغيل C (هذا هو المكان الذي يأتي منه "CRT") يأخذ Argv و Argc من المكدس ثم يستدعي Main. إذا كنت مهتمًا بمعرفة المزيد من كيفية بدء التشغيل القابل للتنفيذ في Linux ، فقد تكون هذه الورقة من قبل Ulrich Drepper (GLIBC Punainer) ذات قيمة: http://people.redhat.com/drepper/dsohowto.pdf

في Linux: سيتم تخزين وسيطات سطر الأوامر في Stack. لا تخلط بين المتغير البيئي و args سطر الأوامر ، مساحة عنوان العملية لها مساحة ذاكرة منفصلة للمتغيرات البيئية

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