سی میں لینکس پوپن سسٹم کال

Sy My Lynks Pwpn Ss M Kal



' popen() فنکشن سٹرنگ کی کمانڈ کے ذریعے دی گئی کمانڈ پر عمل کرے گا۔ فنکشن کو ایک پوائنٹر کو ایک اسٹریم پر واپس کرنا چاہئے جو پائپ کو پڑھنے یا لکھنے کے لئے استعمال کیا جاتا ہے جبکہ کالنگ ایپلیکیشن اور ایگزیکیٹڈ کمانڈ کے درمیان ایک پائپ بھی بناتا ہے۔ Popen فنکشن I/O فنکشن کی معیاری لائبریری میں دستیاب ہے اور ٹرمینل کمانڈ کو چلانے کے لیے دوسرا عمل پیدا کرتا ہے۔ popen() کا اوپن فیز fopen() فنکشن میں اوپن فیز جیسا ہی ہے۔ popen() فنکشن کانٹا لگا کر، پائپ بنا کر، اور شیل کو چلا کر ایک عمل شروع کرتا ہے۔ چونکہ ایک پائپ پہلے سے طے شدہ طور پر یک طرفہ ہوتا ہے۔ نتیجے کے طور پر، سلسلہ یا تو صرف پڑھنے یا صرف لکھنے کے لیے ہے۔ popen() فنکشن کے کامیاب عمل پر، ایک کھلا سلسلہ حاصل ہوتا ہے جو پائپ کو پڑھنے اور لکھنے کے لیے استعمال کیا جاتا ہے۔

مثال 1

مندرجہ ذیل مثال کے پروگرام کے ساتھ، ہم پاپن سسٹم کال کا استعمال کرتے ہوئے موجودہ ڈائریکٹری یا فولڈر میں موجود فائلوں کو پڑھیں گے۔ سب سے پہلے، ہمارے پاس C معیاری لائبریری کی stdio.h ہیڈر فائل ان پٹ ہے۔ پھر، ہمارے پاس ایک پروگرام int main() فنکشن ہے جہاں ہم نے پوپین فنکشن کو تعینات کیا ہے۔ اس سے پہلے، ہم نے 'فائل' کلاس سے پوائنٹر ویری ایبل 'فائل اوپن' قائم کیا۔ فائل کا پوائنٹر متغیر پڑھنے یا لکھنے کے بعد آنے والے بائٹ کی نشاندہی کرتا ہے۔







اس کے بعد، ہم نے کردار کی حد کی قدر کو پڑھنے کے لیے تفویض کیا۔ متغیر 'فائل اوپن' نے پھر 'پاپن' فنکشن کو شروع کیا۔ 'پاپن' فنکشن لینکس کی 'ls -l' کمانڈ لیتا ہے، جو موجودہ ڈائریکٹری کی تمام فائلوں کی فہرست بنائے گا۔ مزید یہ کہ ہم نے پاپن فنکشن میں 'r' پیرامیٹر داخل کیا ہے، جو پڑھنے کے موڈ کی نشاندہی کرتا ہے۔



یہاں، ہم نے پاپن فنکشن کو استعمال کرکے فائلوں کو پڑھنے کے عمل کو پائپ کیا ہے۔ اس کے بعد، ہم نے بنائے گئے پائپ کو while لوپ کے ساتھ پروسیس کیا۔ جبکہ لوپ fgets کے طریقے استعمال کرتا ہے، جو 'لائن'، 'لائن کا سائز' اور 'فائل اوپن' کے دلائل لیتا ہے۔ fgets نے پائپ شدہ عمل کو پڑھا اور اسے سٹرنگ کی علامت '%s' میں محفوظ کیا۔ اس مخصوص علامت کو 'لائن' دلیل کے ساتھ printf طریقہ کے اندر کہا جاتا ہے۔ ایک بار جب ہم نے پائپ پروسیسڈ بنا لیا ہے، pclosed فنکشن کے ساتھ، پائپڈ پروسیس کو بند کیا جا سکتا ہے جیسا کہ نیچے دیئے گئے پروگرام کے آخر میں تعینات کیا گیا ہے۔



# شامل کریں


اہم int ( )

{

فائل * فائل اوپن؛

چار لائن [ 130 ] ;


فائل اوپن = پاپن ( 'ls-l' ، 'ر' ) ;

جبکہ ( fgets ( لائن، لائن کا سائز، فائل اوپن ) )

{

printf ( '%s' ، لائن ) ;

}

pclose ( فائل اوپن ) ;

}





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



مثال 2

پچھلے پوپین پروگرام میں، ہمارے پاس پاپن پروگرام کی فعالیت کا ایک سادہ سا مظاہرہ ہے جو فائلوں کو پڑھنے کے اسٹریمنگ کے عمل کو پائپ کرنے کے لیے استعمال کیا جاتا ہے۔ اب، ہم نے پاپن فنکشن کی ایک اور مثال لی ہے جہاں ہم نے رائٹ موڈ کے ساتھ عمل کو پائپ کیا ہے۔ آئیے مین فنکشن کے ساتھ پروگرام پر غور کریں۔ ہم نے فائل پوائنٹر ویری ایبل کو مین فنکشن کے اندر 'فائل' کے طور پر بنایا ہے۔ فائل پوائنٹر کو پاپین فنکشن کے ساتھ تعینات کیا جاتا ہے۔

پاپن فنکشن 'کیٹ' کمانڈ اور رائٹ موڈ کے لیے 'ڈبلیو' لیتا ہے۔ یہاں، ہر فائل آرگومنٹ کو ترتیب وار پڑھا جاتا ہے اور cat کمانڈ کے ذریعے معیاری آؤٹ پٹ پر بھیجا جاتا ہے۔ فار لوپ باڈی میں، ہم نے عددی شمار کی اقدار کو پرنٹ کرنے کے لیے fprintf فنکشن کا استعمال کیا ہے جیسا کہ ہم نے علامت '%d' کی وضاحت کی ہے۔ پھر بند، pclose نظام کال کے ساتھ popen پائپ عمل.

# شامل کریں


اہم int ( int argc، char ** argv ) {

فائل * فائل = پاپین ( 'کیٹ' ، 'میں' ) ;

int x = 0 ;


کے لیے ( ایکس = 0 ؛ایکس < 5 ;x++ ) {


fprintf ( فائل ، 'میری گنتی = %d \n ' ، ایکس ) ;
}

pclose ( فائل ) ;

واپسی 0 ;

}

جب ہم نے اوپر بنائے گئے عمل کو انجام دیا تو اس نے گنتی کی قدروں کو درج ذیل طریقے سے پرنٹ کیا۔

مثال 3

اب، ہمارے پاس ایک اور پروگرام ہے جو ایک عمل کے ڈیٹا کو دوسرے عمل میں منتقل کرتا ہے۔ ہم اسے پاپن فنکشن سے پائپ کے ساتھ کریں گے۔ ہم نے C کی معیاری لائبریریوں کا استعمال کرتے ہوئے پروگرام کو لاگو کیا ہے۔ پھر، ہمارے پاس ایک پروگرام کی تعیناتی کے لیے ایک int مین فنکشن ہے۔ یہاں، ہم نے sprintf فنکشن میں سٹرنگ کو 'بفر' دلیل کے ساتھ مخصوص کیا ہے۔ sprintf() فنکشن نتیجہ کو پرامپٹ پر بھیجنے کے بجائے sprintf کے فراہم کردہ چار بفر پر رکھتا ہے۔

اس کے بعد، ہم نے 'پڑھیں' متغیر کے اندر پوپین فنکشن کہا۔ وہاں، ہمارے پاس پوپین فنکشن کے اندر دو عمل ہیں۔ 'wc -c' پہلا عمل ہے جو فراہم کردہ حروف کو شمار کرنے کے لیے استعمال کیا جاتا ہے، اور دوسرا عمل 'w' ہے، جو اس بات کی نشاندہی کرتا ہے کہ پائپ لکھنے کے انداز میں کھلا ہے۔ اس کے بعد، ہمارے پاس 'fwrite' فنکشن ہے جو ڈیٹا لکھنے کے لیے پائپ کا استعمال کرتا ہے۔ ڈیٹا 'wc' کے ذریعہ موصول ہوگا، پھر کریکٹر کو شمار کیا جائے گا اور شیل میں دکھایا جائے گا۔

# شامل کریں

# شامل کریں

#include

#include

اہم int ( )

{

فائل * پڑھیں ;

چار بفر [ پچاس ] ;

sprintf ( بفر 'لینکس سسٹم کال' ) ;

پڑھیں = پاپین ( 'wc -c' ، 'میں' ) ;

لکھنا ( بفر، سائز ( چار ) ,strlen ( بفر ) ، پڑھیں ) ;

pclose ( پڑھیں ) ;

}

پرامپٹ میں دکھائے گئے حروف '17' ہیں کیونکہ ہم نے اوپر جو سٹرنگ بتائی ہے وہ '17' حروف پر مشتمل ہے۔ 'wc -c' عمل ان حروف کو پڑھتا ہے اور آؤٹ پٹ کے طور پر پرنٹ کرتا ہے۔

مثال 4

پوپین کی مندرجہ بالا مثال ڈیٹا کو ایک عمل سے دوسرے میں بھیجتی ہے۔ یہاں، ہم پائپ کے ذریعے ایک عمل سے دوسرے عمل تک ڈیٹا حاصل کریں گے۔ پروگرام کا بنیادی کام بفر کی تعمیر کرنا ہے، جو '50' اقدار لیتا ہے۔ پھر، ہم نے متغیر 'r' بنایا، جہاں پوپین فنکشن نے عمل کو تخلیق کیا۔ 'ls' عمل ڈائریکٹری کی فائلوں کی فہرست کے لیے استعمال کیا جاتا ہے، اور پائپ سے ڈیٹا پڑھنے کے لیے 'r' عمل۔ 'ls' عمل ڈیٹا کو پڑھنے کے لیے 'r' عمل میں منتقل کرتا ہے۔ اس کے بعد، ہمارے پاس فریڈ فنکشن ہے، جو ڈیٹا کو پڑھتا ہے اور ڈیٹا کو بفر میں اسٹور کرتا ہے۔ پھر، پرنٹ اسٹیٹمنٹ بفر میں محفوظ ڈیٹا کو پرنٹ کرے گا۔

# شامل کریں

# شامل کریں

#include

#include

اہم int ( )

{

فائل * r;

چار بفر [ پچاس ] ;


r = پوپین ( 'ls' ، 'ر' ) ;

fread ( بفر 1 ، 25 ،ر ) ;


printf ( '%s \n ' , بفر ) ;

pclose ( r ) ;

}

یہاں موجودہ فائلوں کے صرف '50' حروف ورکنگ ڈائرکٹری سے دکھائے جاتے ہیں۔ لہذا، آؤٹ پٹ میں صرف 50 حروف ہوں گے۔

نتیجہ

ہم نے C زبان میں لینکس پاپن سسٹم کالز کا تفصیلی مظاہرہ پیش کیا ہے۔ ہم نے چار مثالوں کو نافذ کیا ہے جہاں ہم نے پوپین فنکشن کو تعینات کیا ہے۔ پاپن فنکشن پائپ سٹریم کو اس موڈ کے مطابق لوٹاتا ہے جو ہم نے تفویض کیا ہے۔ مثالوں میں، ہم نے فائل ہینڈلنگ فنکشنز fread اور fwrite کے ساتھ پڑھنے اور لکھنے کے موڈ دونوں کا استعمال کیا ہے۔ ہم نے پروگرام کا نام popen() فنکشن میں اس کی پہلی دلیل کے طور پر استعمال کیا ہے۔ دوسری دلیل ایک فائل ہے 'r' بطور پڑھی گئی یا 'w' تحریری موڈ کے طور پر۔