البرمجة

فهم آلية تخزين واستخدام الوسائط في سطر الأوامر باستخدام Memory Map

عند استخدام الوسائط في سطر الأوامر في برنامجك، يتم تخزين هذه الوسائط في متغيرين رئيسيين في الذاكرة، وهما argc و argv. دعنا نقوم برسم خريطة للذاكرة لنفهم كيف يحدث ذلك.

أولًا، argc هو عبارة عن عدد صحيح يحمل عدد الوسائط التي تم تمريرها إلى البرنامج، بما في ذلك اسم البرنامج نفسه. يتم تخزين هذا العدد في مكان محدد في الذاكرة.

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

على سبيل المثال، إذا كان لديك برنامج باسم “hello” وقمت بتشغيله كالتالي: ./hello argument1، فإن argc سيكون 2، و argv ستحتوي على مؤشرين. الأول يشير إلى سلسلة “hello\0” والثاني يشير إلى سلسلة “argument1\0”. الـ\0 هو نهاية السلسلة، وهي الطريقة التي يعرف بها البرنامج أن الوسيط قد انتهى.

الآن، عندما تقول “كيف يعرف إذا قرأ وسيطًا واحدًا”، فإن البرنامج يستخدم قيمة argc لتحديد عدد الوسائط. في هذا المثال، إذا كان argc يساوي 2، فإن هذا يعني أن هناك وسيطًا واحدًا بعد اسم البرنامج.

باختصار، يمكن أن يكون argv مصفوفة من مؤشرات إلى السلاسل، وargc يشير إلى عدد الوسائط الممررة. وعند قراءة الوسائط، يتحقق البرنامج من نهاية كل وسيط باستخدام الـ\0 في نهاية كل سلسلة.

المزيد من المعلومات

عند التفصيل في فهم كيفية عمل الذاكرة وكيف تتم تخزين الوسائط في الذاكرة أثناء استخدام الوسائط في سطر الأوامر، يمكننا النظر إلى تفاصيل أكثر حول كيفية تخزين argv وكيف يتم الوصول إلى محتواه.

لنفرض أن لديك البرنامج ./hello وقمت بتشغيله كالتالي: ./hello argument1 argument2. في هذا السياق، سيكون argc يساوي 3، حيث يحتوي على عدد الوسائط بما في ذلك اسم البرنامج. أما argv، ستحتوي على مؤشرات لثلاث سلاسل:

  1. سلسلة البرنامج:

    • تبدأ في عنوان الذاكرة حيث يتم تخزين اسم البرنامج (./hello).
    • البرنامج يستخدم مؤشر argv[0] للوصول إلى هذه السلسلة.
  2. سلسلة الوسيط الأول (argument1):

    • تبدأ في عنوان الذاكرة الذي يلي عنوان السلسلة السابقة.
    • البرنامج يستخدم argv[1] للوصول إلى هذه السلسلة.
  3. سلسلة الوسيط الثاني (argument2):

    • تبدأ في عنوان الذاكرة الذي يلي عنوان السلسلة السابقة.
    • البرنامج يستخدم argv[2] للوصول إلى هذه السلسلة.

وبهذه الطريقة، يمكن للبرنامج الوصول إلى محتوى كل وسيط باستخدام المؤشرات المرتبطة بها في argv. عند الوصول إلى محتوى السلسلة، يتم استخدام نهاية السلسلة \0 كمؤشر على نهاية الوسيط.

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

زر الذهاب إلى الأعلى