Input/output (C++)
سی + + پروگرامنگ زبان میں، ان پٹ/آؤٹ پٹ لائبریری سے مراد سی + + معیاری لائبریری میں کلاس ٹیمپلیٹس اور معاون افعال کا ایک خاندان ہے جو اسٹریم پر مبنی ان پٹ/آؤٹ پٹ صلاحیتوں کو نافذ کرتا ہے۔ یہ سی معیاری لائبریری سے سی کے ایف آئی ایل پر مبنی اسٹریمز کا آبجیکٹ پر مبنی متبادل ہے۔ سی + + کے تخلیق کار بجرنے اسٹروسٹرپ نے 1984 میں اسٹریم I/O لائبریری کا پہلا ورژن لکھا، جو کہ سی کی I/O لائبریری کے ٹائپ سیف اور ایکسٹینسیبل متبادل کے طور پر تھا۔ اس ابتدائی ورژن کے بعد سے لائبریری میں متعدد بہتری آئی ہے، بشمول فارمیٹنگ کو کنٹرول کرنے کے لیے ہیرا پھیری کرنے والوں کا تعارف، اور ٹیمپلیٹائزیشن تاکہ چار کے علاوہ کردار کی دیگر اقسام کے ساتھ اس کے استعمال کی اجازت دی جا سکے۔ 1998 میں معیاری کاری نے لائبریری کو ایس ٹی ڈی نیم اسپیس میں منتقل ہوتے دیکھا، اور مرکزی ہیڈر کو <iostream.h> سے <iost stream> میں تبدیل کر دیا گیا۔ یہ وہ معیاری ورژن ہے جس کا احاطہ باقی مضمون میں کیا گیا ہے۔ جائزہ لائبریری میں زیادہ تر کلاسیں دراصل بہت عام کلاس ٹیمپلیٹس ہیں۔ ہر ٹیمپلیٹ مختلف کرداروں کی اقسام پر کام کر سکتا ہے، اور یہاں تک کہ آپریشن خود بھی، جیسے کہ مساوات کے لیے دو حروف کا موازنہ کیسے کیا جاتا ہے، اپنی مرضی کے مطابق کیا جا سکتا ہے۔ تاہم، زیادہ تر کوڈ کو صرف ایک یا دو حروف کی اقسام کا استعمال کرتے ہوئے ان پٹ اور آؤٹ پٹ آپریشن کرنے کی ضرورت ہوتی ہے، اس طرح زیادہ تر وقت فعالیت تک کئی ٹائپ ڈیف کے ذریعے رسائی حاصل کی جاتی ہے، جو ٹیمپلیٹ اور کردار کی قسم کے عام طور پر استعمال ہونے والے امتزاج کے ناموں کی وضاحت کرتے ہیں۔ مثال کے طور پر، بیسک _ ایف اسٹریم <چارٹ، ٹریٹس> سے مراد عام کلاس ٹیمپلیٹ ہے جو فائل اسٹریمز پر ان پٹ/آؤٹ پٹ آپریشنز کو لاگو کرتا ہے۔ یہ عام طور پر ایف اسٹریم کے طور پر استعمال ہوتا ہے جو بنیادی _ ایف اسٹریم <چار، چار _ ٹریٹس <چار>> کا عرفی نام ہے، یا، دوسرے الفاظ میں، بنیادی _ ایف اسٹریم جو ڈیفالٹ کریکٹر آپریشن سیٹ کے ساتھ چار قسم کے حروف پر کام کرتا ہے۔ لائبریری میں کلاسوں کو تقریبا دو زمروں میں تقسیم کیا جا سکتا ہے: تجریدی اور نفاذ۔ کلاسیں، جو تجریدی زمرے میں آتی ہیں، ایک انٹرفیس فراہم کرتی ہیں جو کسی بھی قسم کے سلسلے کے ساتھ کام کرنے کے لیے کافی ہے۔ اس طرح کی کلاسوں کا استعمال کرتے ہوئے کوڈ کا انحصار اس صحیح مقام پر نہیں ہوتا ہے جہاں سے ڈیٹا پڑھا جاتا ہے یا لکھا جاتا ہے۔ مثال کے طور پر، اس طرح کا کوڈ کسی فائل، میموری بفر یا ویب ساکٹ پر ڈیٹا کو دوبارہ مرتب کیے بغیر لکھ سکتا ہے۔ نفاذ کی کلاسیں تجریدی کلاسوں کو وراثت میں حاصل کرتی ہیں اور ٹھوس قسم کے ڈیٹا سورس یا سنک کے لیے عمل درآمد فراہم کرتی ہیں۔ لائبریری صرف فائل پر مبنی اسٹریمز اور میموری بفر پر مبنی اسٹریمز کے لیے نفاذ فراہم کرتی ہے۔ لائبریری میں کلاسوں کو دو گروپوں میں بھی تقسیم کیا جا سکتا ہے چاہے وہ نچلے درجے کے آپریشنز کو نافذ کرے یا اعلی درجے کے آپریشنز کو۔ وہ کلاسیں جو نچلی سطح کی چیزوں سے نمٹتی ہیں انہیں اسٹریم بفر کہا جاتا ہے۔ وہ فارمیٹنگ کی کوئی فعالیت فراہم کیے بغیر حروف پر کام کرتے ہیں۔ یہ کلاسیں بہت کم ہی براہ راست استعمال ہوتی ہیں۔ اعلی درجے کی کلاسوں کو اسٹریمز کہا جاتا ہے اور وہ مختلف فارمیٹنگ کی صلاحیتیں فراہم کرتے ہیں۔ وہ اسٹریم بفر کے اوپر بنائے گئے ہیں۔ درج ذیل جدول ان پٹ آؤٹ پٹ لائبریری کے ذریعہ فراہم کردہ تمام کلاسوں کی فہرست اور درجہ بندی کرتا ہے۔ ہیڈر فائلیں ان پٹ/آؤٹ پٹ لائبریری کی کلاسیں کئی ہیڈرز میں رہتی ہیں۔ <ios> میں ios _ بیس اور بنیادی _ ios کلاسوں کی تعریفیں شامل ہیں، جو فارمیٹنگ کی معلومات اور متعلقہ اسٹریم-بفر کا انتظام کرتی ہیں۔ <آئی ایس ٹیریم> میں بنیادی _ آئی ایس ٹیریم کلاس ٹیمپلیٹ کی تعریف شامل ہے، جو فارمیٹڈ ان پٹ کو لاگو کرتا ہے۔ <او اسٹریم> بنیادی _ او اسٹریم کلاس ٹیمپلیٹ کی تعریف پر مشتمل ہے، جو فارمیٹڈ آؤٹ پٹ کو لاگو کرتا ہے۔ <آئیوسٹریم> میں بنیادی _ آئیوسٹریم کلاس ٹیمپلیٹ کی تعریف شامل ہے، جو فارمیٹڈ ان پٹ اور آؤٹ پٹ کو لاگو کرتا ہے، اور اس میں <آئی او ایس>، <آئی اسٹریم> اور <او اسٹریم> شامل ہیں۔ <ایف اسٹریم> میں بنیادی _ آئی ایف اسٹریم، بنیادی _ آف اسٹریم اور بنیادی _ ایف اسٹریم کلاس ٹیمپلیٹس کی تعریفیں شامل ہیں جو فائل اسٹریمز پر فارمیٹڈ ان پٹ، آؤٹ پٹ اور ان پٹ/آؤٹ پٹ کو لاگو کرتی ہیں۔ <اسٹریم> میں بنیادی _ آئیسٹرنگ اسٹریم، بنیادی _ آسٹرنگ اسٹریم اور بنیادی _ سٹرنگ اسٹریم کلاس ٹیمپلیٹس کی تعریفیں شامل ہیں جو سٹرنگ پر مبنی اسٹریمز پر فارمیٹڈ ان پٹ، آؤٹ پٹ اور ان پٹ/آؤٹ پٹ کو لاگو کرتی ہیں۔ <iomanip> فارمیٹنگ مینیپولیٹرز پر مشتمل ہے۔ <iosfwd> ان پٹ/آؤٹ پٹ لائبریری میں تمام کلاسوں کے فارورڈ ڈیکلیریشنز پر مشتمل ہے۔ اسٹریم بفر بارہ اسٹریم بفر کلاسز ہیں جن کی وضاحت سی + + زبان میں ٹیبل کے طور پر کی گئی ہے۔ سپورٹ کلاسز آئی او ایس بیس اور بیسک آئی او ایس دو کلاسیں ہیں جو اسٹریم کے نچلے درجے کے بٹس کا انتظام کرتی ہیں۔ آئی او ایس بیس فارمیٹنگ کی معلومات اور اسٹریم کی حالت کو اسٹور کرتا ہے۔ Basic _ ios متعلقہ اسٹریم بفر کا انتظام کرتا ہے۔ بنیادی _ آئی او ایس کو عام طور پر صرف آئی او ایس یا ویوس کے نام سے جانا جاتا ہے، جو ایک مخصوص کردار کی قسم کے ساتھ بنیادی _ آئی او ایس کے لیے دو ٹائپ ڈیف ہیں۔ بنیادی _ آئی او ایس اور آئی او ایس _ بیس بہت کم ہی پروگرامرز کے ذریعہ براہ راست استعمال ہوتے ہیں۔ عام طور پر، ان کی فعالیت تک دیگر کلاسوں جیسے کہ آئسٹریم کے ذریعے رسائی حاصل کی جاتی ہے جو انہیں وراثت میں ملتی ہیں۔ ٹائپ ڈیف فارمیٹنگ مینیپولیٹر ان پٹ/آؤٹ پٹ اسٹریمز C + + ان پٹ/آؤٹ پٹ اسٹریمز کی وضاحت بنیادی طور پر آئسٹریم کے ذریعے کی جاتی ہے، ایک ہیڈر فائل جو C + + معیاری لائبریری کا حصہ ہے (نام کا مطلب ان پٹ/آؤٹ پٹ اسٹریم ہے)۔ سی + + اور اس کے پیشرو، سی پروگرامنگ زبان میں، ڈیٹا ان پٹ یا آؤٹ پٹ کو اسٹریم کرنے کے لیے کوئی خاص نحو نہیں ہے۔ اس کے بجائے، ان کو افعال کی لائبریری کے طور پر ملایا جاتا ہے۔ سی کے stdio.h سے وراثت میں ملنے والے سی ایس ٹی ڈی او ہیڈر کی طرح، آئسٹریم سی + + پروگراموں کے لیے بنیادی ان پٹ اور آؤٹ پٹ خدمات فراہم کرتا ہے۔ آئیوسٹریم معیاری اسٹریمز ان پٹ، آؤٹ پٹ، ایرر (ان بفرڈ)، اور لاگ (بفرڈ) کو ڈیٹا بھیجنے کے لیے آبجیکٹ سن، کاؤٹ، سی آر آر، اور کلوگ کا استعمال کرتا ہے۔ سی + + معیاری لائبریری کے حصے کے طور پر، یہ اشیاء ایس ٹی ڈی نیم اسپیس کا ایک حصہ ہیں۔ کاؤٹ آبجیکٹ او اسٹریم قسم کا ہوتا ہے، جو بائیں بٹ شفٹ آپریٹر کو اوور لوڈ کرتا ہے تاکہ وہ بٹ وائز آپریشنز سے مکمل طور پر غیر متعلقہ آپریشن انجام دے سکے، اور خاص طور پر بائیں دلیل کی قدر کا اندازہ لگاتا ہے، جس سے ایک ہی او اسٹریم آبجیکٹ پر متعدد آپریشنز کی اجازت ملتی ہے، بنیادی طور پر طریقہ جھرن کے لیے ایک مختلف نحو کے طور پر، ایک روانی انٹرفیس کو بے نقاب کرتا ہے۔ سی آر آر اور کلوگ آبجیکٹ بھی او اسٹریم قسم کے ہوتے ہیں، اس لیے وہ اس آپریٹر کو بھی اوور لوڈ کرتے ہیں۔ سن آبجیکٹ آئسٹریم قسم کا ہوتا ہے، جو دائیں بٹ شفٹ آپریٹر کو اوور لوڈ کرتا ہے۔ بٹ شفٹ آپریٹرز کی سمتوں سے ایسا لگتا ہے جیسے ڈیٹا آؤٹ پٹ اسٹریم کی طرف بہہ رہا ہو یا ان پٹ اسٹریم سے دور بہہ رہا ہو۔ آؤٹ پٹ فارمیٹنگ کے طریقے ہیرا پھیری کرنے والے ہیرا پھیری کرنے والے وہ اشیاء ہیں جو <<یا>> آپریٹرز کا استعمال کرتے ہوئے اسٹریم میں ترمیم کر سکتے ہیں۔ دیگر ہیرا پھیری کرنے والوں کو ہیڈر آئیو مینپ کا استعمال کرتے ہوئے پایا جا سکتا ہے۔ تنقید فارمیٹنگ میں ہیرا پھیری کرنے والوں کو آخر میں "ری سیٹ" ہونا چاہیے ورنہ پروگرامر کو اگلے آؤٹ پٹ بیان پر غیر متوقع طور پر ان کے اثرات مل جائیں گے۔ سی + + معیاری لائبریری کے کچھ نفاذ میں ڈیڈ کوڈ کی کافی مقدار ہوتی ہے۔ مثال کے طور پر، گنو لبسٹڈیسی + + او اسٹریم بناتے وقت خود بخود ایک لوکل کی تعمیر کرتا ہے یہاں تک کہ اگر کوئی پروگرام کبھی بھی کسی قسم (تاریخ، وقت یا رقم) کا استعمال نہیں کرتا ہے جسے لوکل متاثر کرتا ہے، اور ایک مستحکم طور پر منسلک "ہیلو، ورلڈ!" جو پروگرام جی این یو libstdc + + کا استعمال کرتا ہے وہ ایک قابل عمل آرڈر تیار کرتا ہے جو ایک مساوی پروگرام سے بڑا ہوتا ہے جو <cstdio> استعمال کرتا ہے۔ سی + + معیاری لائبریری کا جزوی نفاذ موجود ہے جو جگہ سے محدود ماحول کے لیے ڈیزائن کیا گیا ہے۔ ان کا <iost stream> ایسی خصوصیات کو چھوڑ سکتا ہے جن کی ایسے ماحول میں پروگراموں کو ضرورت نہیں ہو سکتی، جیسے کہ لوکل سپورٹ۔ ناموں کے کنونشن کی مثالیں کینونکل "ہیلو، ورلڈ!" پروگرام کا اظہار اس طرح کیا جا سکتا ہے: #include <iostोटریم> int مین () {std:: cout <<"ہیلو، ورلڈ!" یہ پروگرام "ہیلو، ورلڈ!" آؤٹ پٹ کرے گا۔ اس کے بعد ایک نئی لائن اور معیاری آؤٹ پٹ اسٹریم بفر فلش۔ مندرجہ ذیل مثال 'file.txt' نامی فائل بناتی ہے اور متن 'ہیلو، ورلڈ!' رکھتی ہے۔ اس کے بعد اس میں ایک نئی لائن۔ #include <ایف اسٹریم> انٹ مین () {ایس ٹی ڈی:: آف اسٹریم فائل ("file.txt") ؛ فائل <<"ہیلو، ورلڈ!" حوالہ جات بیرونی روابط C + + ان پٹ/آؤٹ پٹ لائبریری کے لیے حوالہ اپاچی C + + معیاری لائبریری آئسٹریمز C + + C + + C + + معیاری لائبریری مضامین میں آؤٹ پٹ کو فارمیٹ کرنے پر جامع ٹیوٹوریل مثال کے طور پر C + + کوڈ کے ساتھ