Input/output (C++)
सी + + प्रोग्रामिंग भाषा में, इनपुट/आउटपुट लाइब्रेरी सी + + मानक लाइब्रेरी में वर्ग टेम्पलेट और सहायक कार्यों के एक परिवार को संदर्भित करता है जो स्ट्रीम-आधारित इनपुट/आउटपुट क्षमताओं को लागू करता है। यह सी मानक पुस्तकालय से सी की एफ. आई. एल.-आधारित धाराओं के लिए एक वस्तु-उन्मुख विकल्प है। सी + + के निर्माता बार्न स्ट्रॉस्ट्रप ने 1984 में धारा आई/ओ पुस्तकालय का पहला संस्करण सी के आई/ओ पुस्तकालय के प्रकार-सुरक्षित और विस्तार योग्य विकल्प के रूप में लिखा था। इस प्रारंभिक संस्करण के बाद से पुस्तकालय में कई सुधार हुए हैं, जिसमें स्वरूपण को नियंत्रित करने के लिए मैनिपुलेटर की शुरुआत और चरित्र के अलावा अन्य वर्ण प्रकारों के साथ इसके उपयोग की अनुमति देने के लिए टेम्प्लेटाइजेशन शामिल है। 1998 में मानकीकरण ने पुस्तकालय को एसटीडी नेमस्पेस में स्थानांतरित कर दिया, और मुख्य हेडर <iostream.h> से <आईओस्ट्रीम> में बदल गया। यह यह मानकीकृत संस्करण है जिसे शेष लेख में शामिल किया गया है। अवलोकन पुस्तकालय में अधिकांश कक्षाएं वास्तव में बहुत सामान्यीकृत वर्ग टेम्पलेट हैं। प्रत्येक टेम्पलेट विभिन्न वर्ण प्रकारों पर काम कर सकता है, और यहां तक कि संचालन स्वयं, जैसे कि समानता के लिए दो वर्णों की तुलना कैसे की जाती है, को अनुकूलित किया जा सकता है। हालांकि, अधिकांश कोड को केवल एक या दो वर्ण प्रकारों का उपयोग करके इनपुट और आउटपुट संचालन करने की आवश्यकता होती है, इस प्रकार अधिकांश समय कार्यक्षमता को कई टाइपडेफ के माध्यम से एक्सेस किया जाता है, जो टेम्पलेट और वर्ण प्रकार के सामान्य रूप से उपयोग किए जाने वाले संयोजनों के लिए नाम निर्दिष्ट करते हैं। उदाहरण के लिए, बेसिक _ एफस्ट्रीम <चार्ट, ट्रेट्स> सामान्य वर्ग टेम्पलेट को संदर्भित करता है जो फ़ाइल स्ट्रीम पर इनपुट/आउटपुट संचालन को लागू करता है। इसका उपयोग आमतौर पर एफस्ट्रीम के रूप में किया जाता है जो कि मूल _ एफस्ट्रीम <चार, चार _ ट्रेट्स <चार>> के लिए एक उपनाम है, या, दूसरे शब्दों में, मूल _ एफस्ट्रीम डिफ़ॉल्ट वर्ण संचालन सेट के साथ प्रकार चार के वर्णों पर काम कर रहा है। पुस्तकालय में कक्षाओं को मोटे तौर पर दो श्रेणियों में विभाजित किया जा सकता हैः अमूर्त और कार्यान्वयन। वर्ग, जो अमूर्त श्रेणी में आते हैं, एक इंटरफेस प्रदान करते हैं जो किसी भी प्रकार की धारा के साथ काम करने के लिए पर्याप्त है। इस तरह के वर्गों का उपयोग करने वाला कोड उस सटीक स्थान पर निर्भर नहीं करता है जहाँ से डेटा पढ़ा जाता है या लिखा जाता है। उदाहरण के लिए, इस तरह के कोड एक पुनर्संयोजन के बिना एक फ़ाइल, एक मेमोरी बफर या एक वेब साकेट में डेटा लिख सकते हैं। कार्यान्वयन वर्ग अमूर्तता वर्गों को विरासत में प्राप्त करते हैं और ठोस प्रकार के डेटा स्रोत या सिंक के लिए एक कार्यान्वयन प्रदान करते हैं। पुस्तकालय केवल फाइल-आधारित धाराओं और स्मृति बफर-आधारित धाराओं के लिए कार्यान्वयन प्रदान करता है। पुस्तकालय में कक्षाओं को दो समूहों में विभाजित किया जा सकता है, चाहे वह निम्न-स्तरीय या उच्च-स्तरीय संचालन को लागू करता हो। निम्न-स्तरीय सामानों से निपटने वाले वर्गों को स्ट्रीम बफर कहा जाता है। वे किसी भी स्वरूपण कार्यक्षमता प्रदान किए बिना वर्णों पर काम करते हैं। इन वर्गों का बहुत कम ही सीधे उपयोग किया जाता है। उच्च-स्तरीय वर्गों को धारा कहा जाता है और ये विभिन्न स्वरूपण क्षमताएँ प्रदान करते हैं। वे धारा बफ़र्स के ऊपर बनाए गए हैं। निम्नलिखित तालिका इनपुट-आउटपुट लाइब्रेरी द्वारा प्रदान किए गए सभी वर्गों को सूचीबद्ध और वर्गीकृत करती है। हेडर फाइल इनपुट/आउटपुट लाइब्रेरी के वर्ग कई हेडर में रहते हैं। <आई. ओ. एस.> में आई. ओ. एस. बेस और बेसिक आई. ओ. एस. वर्गों की परिभाषाएँ शामिल हैं, जो स्वरूपण जानकारी और संबंधित स्ट्रीम-बफर का प्रबंधन करती हैं। <ISTREM> में मूल _ ISTREM वर्ग टेम्पलेट की परिभाषा है, जो स्वरूपित इनपुट को लागू करता है। <ओस्ट्रीम> में मूल _ ओस्ट्रीम वर्ग टेम्पलेट की परिभाषा है, जो प्रारूपित आउटपुट को लागू करता है। <आईओस्ट्रीम> में बुनियादी _ आईओस्ट्रीम वर्ग टेम्पलेट की परिभाषा है, जो प्रारूपित इनपुट और आउटपुट को लागू करता है, और इसमें <आईओएस>, <आईस्ट्रीम> और <ओस्ट्रीम> शामिल हैं। <एफस्ट्रीम> में बुनियादी _ आईएफस्ट्रीम, बुनियादी _ ऑफस्ट्रीम और बुनियादी _ एफस्ट्रीम वर्ग टेम्प्लेट की परिभाषाएँ शामिल हैं जो फ़ाइल धाराओं पर स्वरूपित इनपुट, आउटपुट और इनपुट/आउटपुट को लागू करती हैं। <s stream> में मूल _ isting stream, मूल _ ओस्ट्रिंगस्ट्रीम और मूल _ स्ट्रिंगस्ट्रीम वर्ग टेम्प्लेट की परिभाषाएँ शामिल हैं जो स्ट्रिंग-आधारित धाराओं पर स्वरूपित इनपुट, आउटपुट और इनपुट/आउटपुट को लागू करती हैं। <iomanip> में स्वरूपण मैनिपुलेटर शामिल हैं। <आई. ओ. एस. एफ. डब्ल्यू. डी.> में इनपुट/आउटपुट लाइब्रेरी में सभी वर्गों की अग्रिम घोषणाएँ होती हैं। स्ट्रीम बफर सी + + भाषा में तालिका के रूप में परिभाषित बारह स्ट्रीम बफर वर्ग हैं। समर्थन वर्ग आई. ओ. एस. बेस और बेसिक आई. ओ. एस. दो वर्ग हैं जो एक धारा के निचले स्तर के बिट्स का प्रबंधन करते हैं। आई. ओ. एस. बेस स्वरूपण जानकारी और धारा की स्थिति संग्रहीत करता है। Basic _ ios संबद्ध स्ट्रीम-बफर का प्रबंधन करता है। Basic _ ios को आमतौर पर केवल ios या wios के रूप में जाना जाता है, जो एक विशिष्ट वर्ण प्रकार के साथ Basic _ ios के लिए दो प्रकार हैं। बेसिक _ आई. ओ. एस. और आई. ओ. एस. _ बेस बहुत कम ही प्रोग्रामरों द्वारा सीधे उपयोग किए जाते हैं। आम तौर पर, उनकी कार्यक्षमता को अन्य वर्गों जैसे कि आईओस्ट्रीम के माध्यम से एक्सेस किया जाता है जो उन्हें विरासत में प्राप्त करते हैं। टाइपडेफ फॉर्मेटिंग मैनिपुलेटर इनपुट/आउटपुट स्ट्रीम सी + + इनपुट/आउटपुट स्ट्रीम को मुख्य रूप से आईओस्ट्रीम द्वारा परिभाषित किया जाता है, एक हेडर फ़ाइल जो सी + + मानक लाइब्रेरी का हिस्सा है (नाम इनपुट/आउटपुट स्ट्रीम के लिए खड़ा है)। सी + + और इसके पूर्ववर्ती, सी प्रोग्रामिंग भाषा में, डेटा इनपुट या आउटपुट स्ट्रीमिंग के लिए कोई विशेष वाक्यविन्यास नहीं है। इसके बजाय, इन्हें कार्यों के पुस्तकालय के रूप में जोड़ा जाता है। सी के stdio.h से विरासत में मिले सीएसटीडीओ हेडर की तरह, आईओस्ट्रीम सी + + कार्यक्रमों के लिए बुनियादी इनपुट और आउटपुट सेवाएं प्रदान करता है। आईओस्ट्रीम क्रमशः मानक धाराओं के इनपुट, आउटपुट, एरर (अनबफर्ड) और लॉग (बफर्ड) को और उनसे डेटा भेजने के लिए ऑब्जेक्ट सिन, काउट, सी. आर. आर. और क्लॉग का उपयोग करता है। सी + + मानक पुस्तकालय के हिस्से के रूप में, ये वस्तुएँ एसटीडी नेमस्पेस का एक हिस्सा हैं। काउट ऑब्जेक्ट टाइप ऑस्ट्रीम का होता है, जो लेफ्ट बिट-शिफ्ट ऑपरेटर को ओवरलोड करता है ताकि वह बिटवाइज ऑपरेशन से पूरी तरह से असंबंधित ऑपरेशन कर सके, और विशेष रूप से लेफ्ट आर्ग्यूमेंट के मूल्य का मूल्यांकन करता है, जिससे एक ही ऑस्ट्रीम ऑब्जेक्ट पर कई ऑपरेशन की अनुमति मिलती है, अनिवार्य रूप से विधि कैस्केडिंग के लिए एक अलग वाक्यविन्यास के रूप में, एक धाराप्रवाह इंटरफेस को उजागर करता है। सी. आर. आर. और क्लॉग ऑब्जेक्ट भी ओस्ट्रीम प्रकार के होते हैं, इसलिए वे उस ऑपरेटर को भी अधिभारित करते हैं। सिन ऑब्जेक्ट इसट्रीम प्रकार का होता है, जो सही बिट-शिफ्ट ऑपरेटर को अधिभारित करता है। बिट-शिफ्ट ऑपरेटरों की दिशाओं से ऐसा लगता है जैसे डेटा आउटपुट स्ट्रीम की ओर बह रहा है या इनपुट स्ट्रीम से दूर बह रहा है। आउटपुट स्वरूपण विधियाँ चालन यंत्र वे वस्तुएँ हैं जो <<या>> प्रचालक का उपयोग करके एक धारा को संशोधित कर सकते हैं। हेडर आयोमैनिप का उपयोग करके अन्य मैनिपुलेटर पाए जा सकते हैं। आलोचना प्रारूपण मैनिपुलेटर को अंत में "रीसेट" किया जाना चाहिए अन्यथा प्रोग्रामर अप्रत्याशित रूप से अगले आउटपुट स्टेटमेंट पर अपना प्रभाव प्राप्त करेगा। सी + + मानक पुस्तकालय के कुछ कार्यान्वयनों में महत्वपूर्ण मात्रा में मृत कोड हैं। उदाहरण के लिए, जीएनयू libstdc + + एक ओस्ट्रीम का निर्माण करते समय स्वचालित रूप से एक स्थान का निर्माण करता है, भले ही कोई प्रोग्राम कभी भी किसी भी प्रकार (तिथि, समय या धन) का उपयोग नहीं करता है जिसे एक स्थान प्रभावित करता है, और एक स्थिर रूप से जुड़ा हुआ "हैलो, वर्ल्ड!" जी. एन. यू. libstdc + + का उपयोग करने वाला प्रोग्राम <cstdio> का उपयोग करने वाले समकक्ष प्रोग्राम की तुलना में बड़े परिमाण का निष्पादन योग्य क्रम उत्पन्न करता है। स्थान-सीमित वातावरण के लिए डिज़ाइन किए गए सी + + मानक पुस्तकालय के आंशिक कार्यान्वयन मौजूद हैं; उनके <आईओस्ट्रीम> उन विशेषताओं को छोड़ सकते हैं जिनकी ऐसे वातावरण में कार्यक्रमों को आवश्यकता नहीं हो सकती है, जैसे कि स्थानीय समर्थन। नामकरण परंपराओं के उदाहरण विहित "हैलो, वर्ल्ड!" प्रोग्राम को निम्नानुसार व्यक्त किया जा सकता हैः #include <iost stream> int मुख्य () {std:: cout <<"हैलो, वर्ल्ड!" <<एसटीडीःः एंडल;} यह प्रोग्राम आउटपुट करेगा "हैलो, वर्ल्ड!" इसके बाद एक नई लाइन और मानक आउटपुट स्ट्रीम बफर फ्लश। निम्नलिखित उदाहरण 'file.txt' नामक एक फ़ाइल बनाता है और पाठ 'हैलो, वर्ल्ड!' रखता है। इसके बाद इसमें एक नई लाइन आती है। #include <एफस्ट्रीम> इंट मेन () {एसटीडीः: ऑफस्ट्रीम फ़ाइल ("file.txt"); फ़ाइल <<"हैलो, वर्ल्ड!" <<एसटीडीःः एंडल;} संदर्भ इनपुट/आउटपुट लाइब्रेरी के लिए बाहरी लिंक सी + + संदर्भ अपाचे सी + + मानक लाइब्रेरी आईओस्ट्रीम सी + + सी + + सी + + मानक लाइब्रेरी लेखों में आउटपुट को प्रारूपित करने पर व्यापक ट्यूटोरियल उदाहरण सी + + कोड के साथ