Input/output (C++)
সি + + প্রোগ্রামিং ভাষায়, ইনপুট/আউটপুট লাইব্রেরি সি + + স্ট্যান্ডার্ড লাইব্রেরিতে শ্রেণী টেমপ্লেট এবং সমর্থনকারী ফাংশনগুলির একটি পরিবারকে বোঝায় যা স্ট্রিম-ভিত্তিক ইনপুট/আউটপুট ক্ষমতা প্রয়োগ করে। এটি সি স্ট্যান্ডার্ড লাইব্রেরি থেকে সি-এর এফ. আই. এল-ভিত্তিক স্ট্রিমগুলির একটি অবজেক্ট-ওরিয়েন্টেড বিকল্প। ইতিহাস সি + +-এর স্রষ্টা বার্ন স্ট্রস্ট্রুপ 1984 সালে সি-এর আই/ও গ্রন্থাগারের একটি টাইপ-নিরাপদ এবং সম্প্রসারণযোগ্য বিকল্প হিসাবে স্ট্রিম আই/ও গ্রন্থাগারের প্রথম সংস্করণ লিখেছিলেন। এই প্রাথমিক সংস্করণের পর থেকে গ্রন্থাগারটি বেশ কয়েকটি উন্নতির মধ্য দিয়ে গেছে, যার মধ্যে রয়েছে বিন্যাস নিয়ন্ত্রণের জন্য ম্যানিপুলেটরগুলির প্রবর্তন এবং চরিত্র ব্যতীত অন্য ধরনের অক্ষরের সাথে এর ব্যবহারের অনুমতি দেওয়ার জন্য টেমপ্লেটাইজেশন। 1998 সালে প্রমিতকরণের ফলে গ্রন্থাগারটি এস. টি. ডি নেমস্পেসে স্থানান্তরিত হয় এবং মূল শিরোনামটি <iostream.h থেকে <আইওস্ট্রিম>-এ পরিবর্তিত হয়। এই প্রমিত সংস্করণটিই নিবন্ধের বাকি অংশে অন্তর্ভুক্ত করা হয়েছে। সংক্ষিপ্ত বিবরণ গ্রন্থাগারের বেশিরভাগ ক্লাস আসলে খুব সাধারণ শ্রেণীর টেমপ্লেট। প্রতিটি টেমপ্লেট বিভিন্ন ধরনের অক্ষরের উপর কাজ করতে পারে, এবং এমনকি ক্রিয়াকলাপগুলি, যেমন সমতার জন্য দুটি অক্ষরের তুলনা করা হয়, কাস্টমাইজ করা যেতে পারে। যাইহোক, বেশিরভাগ কোডকে শুধুমাত্র একটি বা দুটি অক্ষরের ধরন ব্যবহার করে ইনপুট এবং আউটপুট অপারেশন করতে হয়, এইভাবে বেশিরভাগ সময় কার্যকারিতাটি বেশ কয়েকটি টাইপেডেফের মাধ্যমে অ্যাক্সেস করা হয়, যা সাধারণত টেমপ্লেট এবং অক্ষরের ধরণের সংমিশ্রণের জন্য নাম নির্দিষ্ট করে। উদাহরণস্বরূপ, বেসিক _ এফস্ট্রিম <চার্ট, ট্রেইটস> সাধারণ শ্রেণীর টেমপ্লেটকে বোঝায় যা ফাইল স্ট্রিমগুলিতে ইনপুট/আউটপুট অপারেশন প্রয়োগ করে। এটি সাধারণত এফস্ট্রিম হিসাবে ব্যবহৃত হয় যা মৌলিক _ এফস্ট্রিম <চার, চার _ ট্রেইট <চার>> এর একটি উপনাম, অথবা, অন্য কথায়, মৌলিক _ এফস্ট্রিম ডিফল্ট অক্ষর অপারেশন সেট সহ টাইপ চারের অক্ষরগুলিতে কাজ করে। গ্রন্থাগারের ক্লাসগুলি মোটামুটি দুটি বিভাগে বিভক্ত করা যেতে পারেঃ বিমূর্ত এবং বাস্তবায়ন। ক্লাসগুলি, যা বিমূর্ত বিভাগে পড়ে, একটি ইন্টারফেস সরবরাহ করে যা যে কোনও ধরণের স্ট্রিমের সাথে কাজ করার জন্য যথেষ্ট। এই ধরনের শ্রেণী ব্যবহার করে কোডটি সঠিক অবস্থানের উপর নির্ভর করে না যেখান থেকে তথ্য পড়া হয় বা লেখা হয়। উদাহরণস্বরূপ, এই ধরনের কোড একটি ফাইল, একটি মেমরি বাফার বা একটি ওয়েব সকেটে পুনরায় সংকলন ছাড়াই তথ্য লিখতে পারে। বাস্তবায়ন শ্রেণীগুলি বিমূর্ত শ্রেণীগুলি উত্তরাধিকার সূত্রে পায় এবং সুনির্দিষ্ট ধরনের তথ্য উৎস বা সিঙ্কের জন্য একটি বাস্তবায়ন প্রদান করে। গ্রন্থাগারটি শুধুমাত্র ফাইল-ভিত্তিক স্ট্রিম এবং মেমরি বাফার-ভিত্তিক স্ট্রিমের জন্য বাস্তবায়ন প্রদান করে। গ্রন্থাগারের ক্লাসগুলি নিম্ন-স্তরের বা উচ্চ-স্তরের ক্রিয়াকলাপ প্রয়োগ করে কিনা তার ভিত্তিতে দুটি গ্রুপে বিভক্ত করা যেতে পারে। যে শ্রেণীগুলি নিম্ন-স্তরের জিনিস নিয়ে কাজ করে তাদের স্ট্রিম বাফার বলা হয়। এগুলি কোনও বিন্যাসকরণ কার্যকারিতা প্রদান না করেই অক্ষরের উপর কাজ করে। এই শ্রেণীগুলি খুব কমই সরাসরি ব্যবহার করা হয়। উচ্চ-স্তরের শ্রেণীগুলিকে স্ট্রিম বলা হয় এবং বিভিন্ন বিন্যাসকরণ ক্ষমতা প্রদান করে। এগুলি স্ট্রিম বাফারের উপরে নির্মিত। নিম্নলিখিত সারণিতে ইনপুট-আউটপুট লাইব্রেরি দ্বারা প্রদত্ত সমস্ত শ্রেণী তালিকাভুক্ত এবং শ্রেণীবদ্ধ করা হয়েছে। হেডার ফাইল ইনপুট/আউটপুট লাইব্রেরির শ্রেণীগুলি বেশ কয়েকটি হেডারে থাকে। <আই. ও. এস>-এ আই. ও. এস. বেস এবং বেসিক আই. ও. এস ক্লাসের সংজ্ঞা রয়েছে, যা ফরম্যাটিং তথ্য এবং সংশ্লিষ্ট স্ট্রিম-বাফার পরিচালনা করে। <আইএসট্রিম>-এ মৌলিক _ আইএসট্রিম শ্রেণী টেমপ্লেটের সংজ্ঞা রয়েছে, যা বিন্যাসিত ইনপুট প্রয়োগ করে। <ওস্ট্রিম>-এ মৌলিক _ ওস্ট্রিম শ্রেণী টেমপ্লেটের সংজ্ঞা রয়েছে, যা বিন্যাসিত আউটপুট প্রয়োগ করে। <আইওস্ট্রিম>-এ বেসিক _ আইওস্ট্রিম ক্লাস টেমপ্লেটের সংজ্ঞা রয়েছে, যা বিন্যাসিত ইনপুট এবং আউটপুট প্রয়োগ করে এবং <আইওএস>, <আইএসট্রিম> এবং <ওএসট্রিম> অন্তর্ভুক্ত করে। <এফস্ট্রিম>-এ বেসিক _ আইএফস্ট্রিম, বেসিক _ অফস্ট্রিম এবং বেসিক _ এফস্ট্রিম ক্লাস টেমপ্লেটের সংজ্ঞা রয়েছে যা ফাইল স্ট্রিমগুলিতে বিন্যাসিত ইনপুট, আউটপুট এবং ইনপুট/আউটপুট প্রয়োগ করে। <এসস্ট্রিম>-এ মৌলিক _ ইস্ট্রিংস্ট্রিম, মৌলিক _ ওস্ট্রিংস্ট্রিম এবং মৌলিক _ স্ট্রিংস্ট্রিম শ্রেণীর টেমপ্লেটগুলির সংজ্ঞা রয়েছে যা স্ট্রিং-ভিত্তিক স্ট্রিমগুলিতে বিন্যাসিত ইনপুট, আউটপুট এবং ইনপুট/আউটপুট প্রয়োগ করে। <আইওমানিপ>-এ ফরম্যাটিং ম্যানিপুলেটর রয়েছে। <আই. ও. এস. এফ. ডব্লিউ. ডি>-এ ইনপুট/আউটপুট লাইব্রেরিতে সমস্ত শ্রেণীর অগ্রবর্তী ঘোষণা রয়েছে। স্ট্রিম বাফার টেবিল হিসাবে সি + + ভাষায় সংজ্ঞায়িত বারোটি স্ট্রিম বাফার ক্লাস রয়েছে। সমর্থন ক্লাস আই. ও. এস. বেস এবং বেসিক আই. ও. এস হল দুটি ক্লাস যা একটি স্ট্রিমের নিম্ন-স্তরের বিট পরিচালনা করে। আই. ও. এস. বেস তথ্য বিন্যাস এবং স্ট্রিমের অবস্থা সংরক্ষণ করে। Basic _ ios সংশ্লিষ্ট স্ট্রিম-বাফার পরিচালনা করে। Basic _ ios সাধারণত কেবল আইওএস বা উইওস নামে পরিচিত, যা একটি নির্দিষ্ট অক্ষরের প্রকার সহ Basic _ ios-এর জন্য দুটি টাইপেডেফ। বেসিক _ আইওএস এবং আইওএস _ বেস খুব কমই প্রোগ্রামারদের দ্বারা সরাসরি ব্যবহার করা হয়। সাধারণত, তাদের কার্যকারিতা অন্যান্য শ্রেণীর মাধ্যমে অ্যাক্সেস করা হয় যেমন আইওস্ট্রিম যা তাদের উত্তরাধিকার সূত্রে পাওয়া যায়। টাইপডেফ ফরম্যাটিং ম্যানিপুলেটর ইনপুট/আউটপুট স্ট্রিম সি + + ইনপুট/আউটপুট স্ট্রিমগুলি প্রাথমিকভাবে আইওস্ট্রিম দ্বারা সংজ্ঞায়িত করা হয়, একটি হেডার ফাইল যা সি + + স্ট্যান্ডার্ড লাইব্রেরির অংশ (নামটি ইনপুট/আউটপুট স্ট্রিমকে বোঝায়)। সি + + এবং এর পূর্বসূরি, সি প্রোগ্রামিং ভাষায়, ডেটা ইনপুট বা আউটপুট স্ট্রিমিংয়ের জন্য কোনও বিশেষ বাক্য গঠন নেই। পরিবর্তে, এগুলি ফাংশনের একটি গ্রন্থাগার হিসাবে একত্রিত করা হয়। সি 'র stdio.h থেকে উত্তরাধিকারসূত্রে পাওয়া সি. এস. টি. ডি. ও হেডারের মতো, আইস্ট্রীম সি + + প্রোগ্রামগুলির জন্য মৌলিক ইনপুট এবং আউটপুট পরিষেবা প্রদান করে। আইওস্ট্রিম যথাক্রমে স্ট্যান্ডার্ড স্ট্রিম ইনপুট, আউটপুট, ত্রুটি (আনবাফারড) এবং লগ (বাফারড)-এ এবং থেকে ডেটা পাঠানোর জন্য অবজেক্ট সিন, কাউট, সের এবং ক্লগ ব্যবহার করে। সি + + স্ট্যান্ডার্ড লাইব্রেরির অংশ হিসাবে, এই বস্তুগুলি এস. টি. ডি নেমস্পেসের একটি অংশ। কাউট অবজেক্টটি টাইপ ওস্ট্রিমের হয়, যা বাম বিট-শিফট অপারেটরকে ওভারলোড করে বিটওয়াইজ ক্রিয়াকলাপের সাথে সম্পূর্ণরূপে সম্পর্কিত নয় এমন একটি ক্রিয়াকলাপ সম্পাদন করে এবং উল্লেখযোগ্যভাবে বাম আর্গুমেন্টের মান মূল্যায়ন করে, একই ওস্ট্রিম অবজেক্টের উপর একাধিক ক্রিয়াকলাপের অনুমতি দেয়, মূলত পদ্ধতি ক্যাসকেডিংয়ের জন্য একটি ভিন্ন বাক্য গঠন হিসাবে, একটি সাবলীল ইন্টারফেস প্রকাশ করে। সের এবং ক্লগ অবজেক্টগুলি ওস্ট্রিম টাইপের হয়, তাই তারা সেই অপারেটরকেও ওভারলোড করে। সিন অবজেক্টটি ইসট্রিম ধরনের, যা সঠিক বিট-শিফট অপারেটরকে ওভারলোড করে। বিট-শিফট অপারেটরদের দিকনির্দেশগুলি দেখে মনে হয় যে ডেটা আউটপুট স্ট্রিমের দিকে প্রবাহিত হচ্ছে বা ইনপুট স্ট্রিম থেকে দূরে প্রবাহিত হচ্ছে। আউটপুট ফরম্যাটিং পদ্ধতি ম্যানিপুলেটর ম্যানিপুলেটর হল এমন বস্তু যা <<বা>> অপারেটর ব্যবহার করে একটি স্ট্রিম পরিবর্তন করতে পারে। হেডার আইওমানিপ ব্যবহার করে অন্যান্য ম্যানিপুলেটর পাওয়া যায়। সমালোচনা ফরম্যাটিং ম্যানিপুলেটরগুলিকে অবশ্যই শেষে "রিসেট" করতে হবে অন্যথায় প্রোগ্রামার অপ্রত্যাশিতভাবে পরবর্তী আউটপুট স্টেটমেন্টে তাদের প্রভাবগুলি পাবেন। সি + + স্ট্যান্ডার্ড লাইব্রেরির কিছু বাস্তবায়নে উল্লেখযোগ্য পরিমাণে ডেড কোড রয়েছে। উদাহরণস্বরূপ, জি. এন. ইউ. libstdc + + স্বয়ংক্রিয়ভাবে একটি লোকেল তৈরি করে যখন একটি ওস্ট্রিম তৈরি করা হয়, এমনকি যদি কোনও প্রোগ্রাম কখনও কোনও লোকেলকে প্রভাবিত করে এমন কোনও প্রকার (তারিখ, সময় বা অর্থ) ব্যবহার না করে এবং একটি স্থিতিশীলভাবে সংযুক্ত "হ্যালো, ওয়ার্ল্ড!" যে প্রোগ্রামটি জি. এন. ইউ. libstdc + + এর <iost stream> ব্যবহার করে তা একটি এক্সিকিউটেবল অর্ডার তৈরি করে যা একটি সমতুল্য প্রোগ্রামের চেয়ে বড় যা <cstdio> ব্যবহার করে। স্থান-সীমাবদ্ধ পরিবেশের জন্য ডিজাইন করা সি + + স্ট্যান্ডার্ড লাইব্রেরির আংশিক বাস্তবায়ন রয়েছে; তাদের <আইওস্ট্রিম> এমন বৈশিষ্ট্যগুলি ছেড়ে দিতে পারে যা এই ধরনের পরিবেশে প্রোগ্রামগুলির প্রয়োজন নাও হতে পারে, যেমন স্থানীয় সমর্থন। প্রচলিত রীতিনীতির নামকরণের উদাহরণ হল "হ্যালো, ওয়ার্ল্ড!" প্রোগ্রামটি নিম্নরূপ প্রকাশ করা যেতে পারেঃ #include <আইওস্ট্রিম> ইন্ট মেইন () {এস. টি. ডি.:: cout <<"হ্যালো, ওয়ার্ল্ড!" এই প্রোগ্রামটি "হ্যালো, ওয়ার্ল্ড!" আউটপুট দেবে। এর পরে একটি নতুন লাইন এবং স্ট্যান্ডার্ড আউটপুট স্ট্রিম বাফার ফ্লাশ। নিচের উদাহরণটি 'file.txt' নামে একটি ফাইল তৈরি করে এবং 'হ্যালো, ওয়ার্ল্ড!' লেখাটি রাখে। এর পরে একটি নতুন লাইন। #include <এফস্ট্রিম> ইন্ট মেইন () {এস. টি. ডি.:: অফস্ট্রিম ফাইল ("file.txt"); ফাইল <<"হ্যালো, ওয়ার্ল্ড!" তথ্যসূত্র ইনপুট/আউটপুট লাইব্রেরির জন্য বাহ্যিক লিঙ্ক সি + + রেফারেন্স অ্যাপাচি সি + + স্ট্যান্ডার্ড লাইব্রেরি আইওস্ট্রিমস সি + + সি + + সি + + স্ট্যান্ডার্ড লাইব্রেরি নিবন্ধগুলিতে আউটপুট বিন্যাস করার বিষয়ে বিস্তৃত টিউটোরিয়াল উদাহরণস্বরূপ সি + + কোড সহ