فورک اور ایگزیکٹو کے ساتھ کوڈنگ مثال کے طور پر سی میں۔

Coding With Fork Exec Example C



ہمارے مضمون کا عنوان سی زبان کے دو مختلف افعال پر مشتمل ہے جو ہمارے سسٹم میں کسی بھی پروگرام کو چلاتے وقت ہوتا ہے۔ بدقسمتی سے ، سی میں ایک وقت میں ایک سے زیادہ پروگرام ہونے کے صفر امکانات ہیں ، ایک خاص وقت پر صرف ایک ہی کام ہو سکتا ہے ، جس کا مطلب ہے کہ یہ سمورتی پروگراموں کو چلنے نہیں دیتا۔ اس کی وجہ سے آپ دوسرے عمل کو انجام دینے کے لیے ایک عمل کی تکمیل کا انتظار کرتے ہیں۔ اس خرابی کا سراغ لگانے کے مسئلے سے بچنے کے لیے ، آپ کو ایک اچھے ڈویلپر کی حیثیت سے اپنے پروگرام کو اچھے طریقے سے تیار کرنے کی ضرورت پڑسکتی ہے۔ لینکس فورک () انتظار پر قابو پانے اور آپ کے سسٹم میں ہم آہنگی کی اجازت دینے کے لئے استعمال ہوتا ہے۔ یہ ایک نئے عمل کو ڈپلیکیٹ کرنے میں مدد کرتا ہے اور ڈپلیکیٹڈ پروسیس کو کال کرکے ایک نیا بناتا ہے۔ نیا عمل بچوں کا عمل ہے ، اور پچھلے عمل کو والدین کا عمل کہا جاتا ہے۔

جبکہ ، exec () فنکشن موجودہ موجودہ پروگرام کو نئے کے ساتھ تبدیل کرنے کے لیے استعمال ہوتا ہے۔ یہ تبدیلی کسی پروگرام یا فائل کے مواد میں ترمیم کرکے کی جاتی ہے۔ تو فورک اور ایگزیکٹ کے درمیان فرق یہ ہے کہ کانٹا موجودہ عمل سے ایک نیا عمل تخلیق کرتا ہے ، اور ایکز کو موجودہ پروگرام کو تبدیل کرنے کے لیے استعمال کیا جاتا ہے۔







ضروریات۔

آپ کے لینکس سسٹم پر کسی بھی سی پروگرام کو چلانے کے لیے ، ہمیں اس پر کچھ شرائط انسٹال کرنے کی ضرورت ہے۔ شارٹ کٹ طریقہ Ctrl+Alt+T استعمال کرکے ٹرمینل پر جائیں۔ اب مین پیجز انسٹال کرنے کے لیے درج ذیل کمانڈ لکھیں۔



$سودومناسبانسٹال کریںmanpages-dev



یہ تمام متعلقہ صفحات انسٹال کرے گا۔





آگے بڑھتے ہوئے ، لینکس پر پروگرام چلانے کے لیے ، آپ کو ایک کوڈ کمپائلر انسٹال کرنے کی ضرورت ہے۔ اس کوڈ کو مرتب کرنے اور اس پر عمل کرنے کے لیے استعمال کیا جاتا ہے۔ اس مقصد کے لیے ، ہم اپنے سسٹم میں جی سی سی ریپوزٹریز لگائیں گے۔

$سودومناسبانسٹال کریںجی سی سی



c میں exec کے ساتھ کوڈنگ۔

جیسا کہ ہم نے لینکس میں مین پیجز انسٹال کیے ہیں ، ہم عمل سے متعلق تفصیل دیکھنے کے لیے درج ذیل کمانڈ استعمال کریں گے۔ بنیادی نمونہ ترکیب مندرجہ ذیل ہے:

نحو۔

ایگزیک(راستے کا نام/فائل، argv)؛

یہاں ہم نے unistd.h ہیڈر استعمال کیا ہے کیونکہ اس میں exec فنکشن کے خاندانوں کی تمام معلومات ہوتی ہیں۔

$آدمی عملدرآمد

اب مذکورہ بالا تصویر میں ، آپ عمل کی اقسام کا مشاہدہ کرسکتے ہیں۔ یہ ایگزیکٹو افعال کا خاندان ہیں۔ ہر ایک ایک ہی بیس کے بعد ایک مختلف فنکشن کے لیے ہے ، exec۔

مثال: اب ، مزید آگے بڑھتے ہوئے ، ہم ایک مثال کی مدد سے exec کی فعالیت کو بیان کریں گے۔ ہم exec کا ایک فنکشن اس کے کام کو ظاہر کرنے کے لیے لیں گے ، جو کہ execv ہے۔ سب سے پہلے ، ہم .c کی توسیع کے ساتھ دو فائلیں بنائیں گے۔ ان کی تخلیق کے بعد ، ہم ان میں متعلقہ کوڈ لکھیں گے اور نتیجہ دیکھنے کے لیے ان پر عمل کریں گے۔

ایک فائل کا نام sample4.c پر غور کریں۔ براہ کرم اسے کھولیں اور درج ذیل کوڈ استعمال کریں۔ اس کوڈ میں ، ہم نے ایک خاص انداز میں ذیل میں حوالہ دیا ہے۔

ایگزیکیو(./نمونہ 4 کاپی ، دلائل۔)؛

پہلے حصے میں نئی ​​ڈائریکٹری کا راستہ ہے ، اور دوسرا حصہ دلائل کی صف کو بطور پیرامیٹر دکھاتا ہے جو ہم نے پاس کیا ہے۔

نمونہ 4.c

سب سے پہلے ، ہم نے موجودہ عمل کی آئی ڈی پرنٹ کی ہے۔ دوم ، ہم نے ختم کرنے کے لیے آخر میں NULL کے ساتھ ایک حرف صف تیار کی ہے۔ تیسرا ہم نے نمونہ 4 کاپی فنکشن کہا ہے۔

Sample4copy.c

جب ہم exec فنکشن () کو کہتے ہیں ، عمل کی تصویر بدل جاتی ہے۔ ذیل میں دی گئی تصویر کے نیچے نمونہ 4 کوپی ڈاٹ سی کا کوڈ دکھایا گیا ہے۔

یہاں ہم نے موجودہ عمل کی شناخت حاصل کرنے کے لیے صرف پرنٹ بیانات کا استعمال کیا ہے۔

متعلقہ کوڈز کی آؤٹ پٹ درج ذیل کمانڈز کے ذریعے حاصل کی جا سکتی ہے۔

$ GCC – o sample4 sample4.c
$ GCC sampleo sample4copy sample4copy.c
$./نمونہ 4۔

جیسا کہ ہم نے پہلے بیان کیا ہے ، جی سی سی لفظ کوڈ کو مرتب کرنے کے لیے استعمال کیا جاتا ہے ، اور مرتب کرنے کے بعد ، کوڈ کو کامیابی سے چلایا جاتا ہے۔

تصویر کے مطابق ، نمونہ 4 سی فائل کا پی آئی ڈی پہلے دکھایا گیا ہے جیسا کہ اسے ایگزیکٹو کال سے پہلے اعلان کیا گیا تھا۔ پھر exec () فنکشن کہلانے کے بعد ، file sample4copy.c کے دونوں پرنٹ سٹیٹمینٹس کو عمل میں لایا جاتا ہے جہاں getpid () عمل کی شناخت حاصل کرنے کے لیے استعمال ہوتا ہے۔

c میں کانٹے کے ساتھ کوڈنگ۔

کانٹا () فنکشن والدین کے عمل سے بچے کا عمل بناتا ہے۔ اس میں دو ہیڈر بھی شامل ہیں جن میں کانٹے کی معلومات بھی شامل ہے۔

نحو:

Pid_t کانٹا(باطل)؛

ہم مین پیج کو استعمال میں مدد کے لیے استعمال کر سکتے ہیں۔

$آدمیکانٹا

مثال: اب ایک نمونہ فائل 3.c بنا کر ایک مثال پر غور کریں۔ ہم فائل کے اندر کوڈ داخل کریں گے۔ کوڈ کے مطابق ، ہم نے فورک کی حیثیت کو فورکرانک کے طور پر مقرر کیا ہے۔

نمونہ 3. c

ہم نے شرط کو لاگو کرنے کے لیے if-else بیان استعمال کیا ہے۔ فورک () تصور کو سمجھنے میں مدد کے لیے یہاں سادہ پرنٹ کمانڈز کا اعلان کیا گیا ہے۔ فورکرانک کو پہلے 0 اور پھر -1 قرار دیا گیا ہے۔ فورک () کے ساتھ ، اب دو عمل ہیں جو بیک وقت کام کر رہے ہیں۔ آؤٹ پٹ اسی کوڈ کا استعمال کرتے ہوئے حاصل کیا جاسکتا ہے ، جیسا کہ اوپر مثال کے طور پر استعمال کیا گیا ہے۔

$ GCC –o sample3.c
$./نمونہ 3۔

آؤٹ پٹ سے پتہ چلتا ہے کہ بچے کا عمل والدین سے پہلے انجام دیا جاتا ہے جب والدین کا عمل انتظار کر رہا تھا۔ ویٹ فنکشن کا مطلب یہ ہے کہ اس سے والدین کے فنکشن کو انتظار کرنا پڑتا ہے جب تک کہ بچوں کے تمام عمل میں سے کوئی ایک ختم نہ ہو جائے۔

فورک اور ایکزیک سسٹم اجتماعی طور پر کال کرتا ہے۔

یہاں ہم دو فائلیں لیں گے جن کا نام sample1.c اور sample2.c ہے۔ سب سے پہلے ، فائل sampl1.c کھولیں اور کوڈ لکھیں جو تصویر میں نیچے شامل ہے۔ ہم نے فورک () سسٹم کال کا استعمال کیا ہے۔ جب چائلڈ پروسیس بن جائے گا ، p کو 0 کے ساتھ تفویض کیا جائے گا۔

نمونہ 1. سی۔

نمونہ 2. c

مذکورہ بالا مثالوں کی طرح ، نمونہ 2 فائل میں پرنٹ ایف بیانات ہوں گے۔ sample1.c میں ، سب سے پہلے پرنٹ کمانڈ کو پھانسی دی جاتی ہے ، پھر فورک فنکشن کہا جاتا ہے ، جب p == 0 ، پھر چائلڈ پارٹ پر عمل کیا جاتا ہے اور sample2.c فائل چلائی جائے گی۔ آؤٹ پٹ دونوں فائلوں کو مرتب کرنے کے لیے جی سی سی پر مشتمل ہوگا۔ یہاں والدین کا نمونہ 1. c id اور sample2.c id مختلف ہے کیونکہ وہ والدین اور بچے ہیں۔

نتیجہ

اس آرٹیکل میں ، ہم نے استعمال اور تصور کو آسانی سے سمجھنے کے لیے الگ الگ اور اجتماعی طور پر کانٹے اور عمل دونوں کا استعمال کیا ہے۔ مجھے امید ہے کہ اس ٹیوٹوریل میں کافی مواد موجود ہے جو آپ کے علم میں اضافے تک رسائی کا باعث بنے گا۔