الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استعمال exit()

بدأه مروة المحمود في 13 مارس 2010 · 2 رد · 410 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

استعمال exit() بلغة السي

ممكن حدا يشرح كيف الية عملها

يعني مثلأ انا وقت حط exit() ببرنامجي

يعني انا عم اطلع من البرنامج كلو ولا مثلا من حلقة ازا مثلا كنت كاتبة

if (...)
{printf(..........)
}
else
exit(1)

وبعدين شو بنقصد وقت بنحط exit(0) او exit(1)

او ايا بارامتر تاني

#2

exit دالة غريبة قليلاً, إن صح أن يطلق عليها دالة أصلاً.

جميع الدوال, عندما نقوم باستدعائها, فإنها تعود إلى المكان الذي بدأت منه, فمثلاً:

void print_something()
{
  ...
}
...
int main()
{
  print_something();
  // do other stuff!
}

عندما نقوم باستدعاء الدالة print_something و تنتهي من عملها, فإن التنفيذ يعود إلى السطر التالي لها في main, و الذي قلنا عنه do other stuff!

في حالة exit فإنها تسمى non returning function. أي بمجرد استدعائها, فإن التحكم ينتقل دون عودة, مثل goto بالضبط. التحكم في حالة exit يتم نقله لنظام التشغيل, بعد قيام البرنامج بعمليات تنظيف وارءه للموارد التي أخذها من نظام التشغيل.

بالطبع عملية التنظيف مخفية عن المبرمج و يقوم المترجم بإدراجها.

بالنسبة للفرق بين عملية exit إذا أرسلنا لها 1 أو 0, فهذا شيء من التراث :)

في أنظمة Unix و Linux و غيرهم الكثير, عندما نقوم بتشغيل برنامج ما, فإن نظام التشغيل يقوم بنقل البرنامج إلى الذاكرة, كيف يصل البرنامج إلى الذاكرة و كيف و ........ عملية معقدة,

و لكن زبدة الموضوع, أن نظام التشغيل يبحث عن دالة اسمها main بشكل مبسط, و يقوم باستدعائها, كما قمنا باستدعاء print_something.

بالطبع main تعيد int, و الذي حصل في الماضي, أن مبرمجي الأنظمة اتفقوا على أن إعادة 0 تعني أن البرنامج أتم المهمة المطلوبة, بينما إذا أعاد قيمة غير الصفر, فتعني أن البرنامج لم يقم بالمطلوب.

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

يمكنك اعتبارها وسيلة تواصل بدائية جداً بين البرامج.

تحياتي...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 13 مارس 2010 في 18:30

#3
Khaled.Alshaya كتب:

exit دالة غريبة قليلاً, إن صح أن يطلق عليها دالة أصلاً.

جميع الدوال, عندما نقوم باستدعائها, فإنها تعود إلى المكان الذي بدأت منه, فمثلاً:

void print_something()
{
  ...
}
...
int main()
{
  print_something();
  // do other stuff!
}

عندما نقوم باستدعاء الدالة print_something و تنتهي من عملها, فإن التنفيذ يعود إلى السطر التالي لها في main, و الذي قلنا عنه do other stuff!

في حالة exit فإنها تسمى non returning function. أي بمجرد استدعائها, فإن التحكم ينتقل دون عودة, مثل goto بالضبط. التحكم في حالة exit يتم نقله لنظام التشغيل, بعد قيام البرنامج بعمليات تنظيف وارءه للموارد التي أخذها من نظام التشغيل.

بالطبع عملية التنظيف مخفية عن المبرمج و يقوم المترجم بإدراجها.

بالنسبة للفرق بين عملية exit إذا أرسلنا لها 1 أو 0, فهذا شيء من التراث :)

في أنظمة Unix و Linux و غيرهم الكثير, عندما نقوم بتشغيل برنامج ما, فإن نظام التشغيل يقوم بنقل البرنامج إلى الذاكرة, كيف يصل البرنامج إلى الذاكرة و كيف و ........ عملية معقدة,

و لكن زبدة الموضوع, أن نظام التشغيل يبحث عن دالة اسمها main بشكل مبسط, و يقوم باستدعائها, كما قمنا باستدعاء print_something.

بالطبع main تعيد int, و الذي حصل في الماضي, أن مبرمجي الأنظمة اتفقوا على أن إعادة 0 تعني أن البرنامج أتم المهمة المطلوبة, بينما إذا أعاد قيمة غير الصفر, فتعني أن البرنامج لم يقم بالمطلوب.

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

يمكنك اعتبارها وسيلة تواصل بدائية جداً بين البرامج.

تحياتي...

الف شكر

وصلت الفكرة تماماً

مواضيع مشابهة