ای سی ای سی سسٹم کال سی۔

Exec System Call C



ایگزیکٹ فیملی کے سی میں بہت سے افعال ہیں۔ یہ سی افعال بنیادی طور پر ایک علیحدہ عمل میں سسٹم کمانڈ چلانے کے لیے استعمال ہوتے ہیں جو کہ مین پروگرام اور آؤٹ پٹ پرنٹ کرتا ہے۔

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







ایگزیک فیملی میں سی سسٹم افعال:

ایگزیکٹو فنکشن فیملیز کی وضاحت ہیڈر میں کی گئی ہے۔ unistd.h . لہذا ، آپ کو یہ ہیڈر سی پروگرام پر استعمال کرنا چاہیے جہاں آپ ان افعال کو استعمال کرنا چاہتے ہیں۔



دستیاب ایگزیکٹو فنکشنز ان کے فنکشن پیرامیٹرز کے ساتھ ذیل میں دیے گئے ہیں:



  • int execl (const char *path، const char *arg،…، NULL)؛
  • int execlp (const char *file، const char *arg،…، NULL)؛
  • int execv (const char *path، char *const argv [])
  • int execvp (const char *file، char *const argv [])
  • int execle (const char *path، const char *arg،…، NULL، char *const envp [])
  • int execve (const char *file، char *const argv []، char *const envp [])

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





execl () سسٹم فنکشن:

execl () میں سسٹم فنکشن قابل عمل بائنری فائل (یعنی / bin / ls پہلی اور دوسری دلیل کے طور پر۔ پھر ، دلائل (یعنی -ایل ایچ ، /گھر ) کہ آپ اس پر عملدرآمد کے لیے منتقل کرنا چاہتے ہیں۔ خالی . پھر execl () سسٹم فنکشن کمانڈ چلاتا ہے اور آؤٹ پٹ پرنٹ کرتا ہے۔ اگر کوئی غلطی ہوتی ہے تو ، execl () واپس کرتا ہے -1۔ بصورت دیگر ، یہ کچھ بھی واپس نہیں کرتا ہے۔

نحو:

intمثال کے طور پر(const چار *راستہ، const چار *ناراض،...،خالی)؛

ایکسل () سسٹم فنکشن کی ایک مثال ذیل میں دی گئی ہے۔



#شامل کریں

intمرکزی(باطل) {
چار *binaryPath= ' / بن / ایل ایس'؛
چار *arg1= '-لھ'؛
چار *arg2= '/گھر'؛

مثال کے طور پر(binaryPath،binaryPath،arg1،arg2،خالی)؛

واپسی ؛
}

میں نے بھاگ لیا ls -lh / گھر execl () سسٹم فنکشن کا استعمال کرتے ہوئے کمانڈ۔ جیسا کہ آپ دیکھ سکتے ہیں ، صحیح نتیجہ ظاہر ہوتا ہے۔

execlp () سسٹم فنکشن:

execl () استعمال نہیں کرتا۔ راستہ ماحولیاتی متغیر لہذا ، قابل عمل فائل کا مکمل راستہ اسے execl () کے ساتھ چلانے کی ضرورت ہے۔ execlp () PATH ماحول متغیر استعمال کرتا ہے۔ لہذا ، اگر PATH میں ایک قابل عمل فائل یا کمانڈ دستیاب ہے ، تو اسے چلانے کے لیے کمانڈ یا فائل کا نام کافی ہے ، مکمل راستے کی ضرورت نہیں ہے۔

نحو:

intمثال کے طور پر(const چار *فائل، const چار *ناراض،...،خالی)؛

ہم execlp () مثال کے طور پر execlp () سسٹم فنکشن کا استعمال کرتے ہوئے دوبارہ لکھ سکتے ہیں:

#شامل کریں

intمرکزی(باطل) {
چار *پروگرام نام= 'ایل ایس'؛
چار *arg1= '-لھ'؛
چار *arg2= '/گھر'؛

مثال کے طور پر(پروگرام نام،پروگرام نام،arg1،arg2،خالی)؛

واپسی ؛
}

میں نے صرف کمانڈ کا نام پاس کیا۔ ایل ایس ، مکمل راستہ نہیں۔ / bin / ls . جیسا کہ آپ دیکھ سکتے ہیں ، مجھے وہی آؤٹ پٹ ملا جو پہلے تھا۔

execv () سسٹم فنکشن:

ایکسل () فنکشن میں ، قابل عمل فائل کے پیرامیٹرز فنکشن کو مختلف دلائل کے طور پر منتقل کیے جاتے ہیں۔ execv () کے ساتھ ، آپ تمام پیرامیٹرز کو NULL ختم شدہ صف میں پاس کر سکتے ہیں۔ argv . صف کا پہلا عنصر قابل عمل فائل کا راستہ ہونا چاہئے۔ بصورت دیگر ، execv () فنکشن صرف execl () فنکشن کی طرح کام کرتا ہے۔

نحو:

intexecv(const چار *راستہ، چار *constargv[])؛

ہم execl () مثال کو دوبارہ لکھ سکتے ہیں:

#شامل کریں

intمرکزی(باطل) {
چار *binaryPath= ' / بن / ایل ایس'؛
چار *دلائل[] = {binaryPath، '-لھ'، '/گھر'،خالی}؛

execv(binaryPath،دلائل)؛

واپسی ؛
}

جیسا کہ آپ دیکھ سکتے ہیں ، میں صحیح پیداوار حاصل کر رہا ہوں۔

execvp () سسٹم فنکشن:

execv () سسٹم فنکشن کی طرح کام کرتا ہے۔ لیکن ، PATH ماحولیاتی متغیر استعمال ہوتا ہے۔ لہذا ، قابل عمل فائل کے مکمل راستے کی ضرورت نہیں ہے جیسا کہ execlp () میں ہے۔

نحو:

intexecvp(const چار *فائل، چار *constargv[])؛

ہم execv () مثال کو دوبارہ لکھ سکتے ہیں:

#شامل کریں

intمرکزی(باطل) {
چار *پروگرام نام= 'ایل ایس'؛
چار *دلائل[] = {پروگرام نام، '-لھ'، '/گھر'،خالی}؛

execvp(پروگرام نام،دلائل)؛

واپسی ؛
}

جیسا کہ آپ دیکھ سکتے ہیں ، صحیح آؤٹ پٹ ظاہر ہوتا ہے۔

execle () سسٹم فنکشن:

execl () کی طرح کام کرتا ہے لیکن آپ اس کے ساتھ اپنے ماحول کے متغیرات بھی فراہم کر سکتے ہیں۔ ماحول کے متغیرات کو ایک صف کے طور پر منظور کیا جاتا ہے۔ envp . کا آخری عنصر۔ envp صف NULL ہونی چاہیے۔ دوسرے تمام عناصر میں کلیدی قدر والے جوڑے سٹرنگ کے طور پر ہوتے ہیں۔

نحو:

intنکالیں(const چار *راستہ، const چار *ناراض،...،خالی، چار * constenvp[] )؛

execle () سسٹم فنکشن کی ایک مثال ذیل میں دی گئی ہے:

#شامل کریں

intمرکزی(باطل) {
چار *binaryPath= '/bin/bash'؛
چار *arg1= '-سی'؛
چار *arg2= 'باہر پھینک دیا '$ HOSTNAME ملاحظہ کریں۔:آپ کے براؤزر سے $ PORT۔''؛
چار *constenv[] = {'HOSTNAME = www.linuxhint.com'، پورٹ = 8080،خالی}؛

نکالیں(binaryPath،binaryPath،arg1،arg2،خالی،env)؛

واپسی ؛
}

میں نے دو ماحولیاتی متغیرات پاس کیے۔ میزبان کا نام اور پورٹ execle () فنکشن میں۔ جیسا کہ آپ دیکھ سکتے ہیں ، میں ان کو قابل عمل سے حاصل کر سکتا ہوں۔ /bin/bash .

execve () سسٹم فنکشن:

جیسے execle () آپ execve () کے ساتھ اپنے ماحول کے متغیرات بھی فراہم کر سکتے ہیں۔ آپ دلائل کو بطور صف بھی پاس کر سکتے ہیں جیسا کہ آپ نے execv () میں کیا تھا۔

نحو:

intعملدرآمد(const چار *فائل، چار *constargv[]، چار *constenvp[])؛

مثال کے طور پر execle () کو دوبارہ لکھا جا سکتا ہے:

#شامل کریں

intمرکزی(باطل) {
چار *binaryPath= '/bin/bash'؛
چار *constدلائل[] = {binaryPath، '-سی'، 'باہر پھینک دیا '$ HOSTNAME ملاحظہ کریں۔:$ پورٹ
اپنے براؤزر سے.''،خالی}؛
چار *constenv[] = {'HOSTNAME = www.linuxhint.com'، پورٹ = 8080،خالی}؛

عملدرآمد(binaryPath،دلائل،env)؛

واپسی ؛
}

جیسا کہ آپ دیکھ سکتے ہیں ، ہمیں وہی پیداوار ملتی ہے جیسا کہ execle () مثال میں۔

تو ، اس طرح آپ لینکس میں سسٹم پروگرامنگ کے لئے سی میں ایگزیکٹ فنکشن فیملی استعمال کرتے ہیں۔ اس مضمون کو پڑھنے کے لیے شکریہ۔