Input/output (C++)
સી + + પ્રોગ્રામિંગ ભાષામાં, ઇનપુટ/આઉટપુટ લાઇબ્રેરી એ સી + + સ્ટાન્ડર્ડ લાઇબ્રેરીમાં વર્ગ નમૂનાઓ અને સહાયક કાર્યોના પરિવારનો સંદર્ભ આપે છે જે સ્ટ્રીમ-આધારિત ઇનપુટ/આઉટપુટ ક્ષમતાઓને અમલમાં મૂકે છે. તે સી સ્ટાન્ડર્ડ લાઈબ્રેરીમાંથી સીની એફઆઈએલ-આધારિત સ્ટ્રીમ્સનો ઓબ્જેક્ટ-ઓરિએન્ટેડ વિકલ્પ છે. C + + ના નિર્માતા બાર્ન સ્ટ્રોસ્ટ્રુપે 1984માં સ્ટ્રીમ I/O લાઈબ્રેરીનું પ્રથમ સંસ્કરણ લખ્યું હતું, જે Cની I/O લાઈબ્રેરીના પ્રકાર-સુરક્ષિત અને વિસ્તૃત વિકલ્પ તરીકે હતું. આ પ્રારંભિક સંસ્કરણથી પુસ્તકાલયમાં સંખ્યાબંધ સુધારાઓ થયા છે, જેમાં ફોર્મેટિંગને નિયંત્રિત કરવા માટે મેનિપ્યુલેટરની રજૂઆત અને ચાર સિવાયના અક્ષર પ્રકારો સાથે તેનો ઉપયોગ કરવાની મંજૂરી આપવા માટે ટેમ્પ્લેટાઇઝેશનનો સમાવેશ થાય છે. 1998 માં માનકીકરણમાં લાઇબ્રેરીને એસટીડી નેમસ્પેસમાં ખસેડવામાં આવી, અને મુખ્ય હેડર <iostream.h> થી <iost stream> માં બદલાઈ ગયું. તે આ પ્રમાણિત સંસ્કરણ છે જે બાકીના લેખમાં આવરી લેવામાં આવ્યું છે. ઝાંખી પુસ્તકાલયના મોટાભાગના વર્ગો ખરેખર ખૂબ જ સામાન્યીકૃત વર્ગ નમૂનાઓ છે. દરેક નમૂના વિવિધ અક્ષર પ્રકારો પર કામ કરી શકે છે, અને કામગીરી પોતે પણ, જેમ કે સમાનતા માટે બે અક્ષરોની સરખામણી કેવી રીતે કરવામાં આવે છે, તેને કસ્ટમાઇઝ કરી શકાય છે. જો કે, મોટાભાગના કોડને માત્ર એક કે બે અક્ષર પ્રકારોનો ઉપયોગ કરીને ઇનપુટ અને આઉટપુટ કામગીરી કરવાની જરૂર હોય છે, આમ મોટાભાગે કાર્યક્ષમતાને કેટલાક ટાઇપડેફ્સ દ્વારા એક્સેસ કરવામાં આવે છે, જે સામાન્ય રીતે ઉપયોગમાં લેવાતા નમૂના અને અક્ષર પ્રકારનાં સંયોજનો માટે નામોનો ઉલ્લેખ કરે છે. ઉદાહરણ તરીકે, બેઝિક _ એફસ્ટ્રીમ <ચાર્ટ, ટ્રેઇટ્સ> એ સામાન્ય વર્ગ નમૂનાનો સંદર્ભ આપે છે જે ફાઇલ સ્ટ્રીમ્સ પર ઇનપુટ/આઉટપુટ કામગીરીનો અમલ કરે છે. તેનો ઉપયોગ સામાન્ય રીતે એફસ્ટ્રીમ તરીકે થાય છે જે મૂળભૂત _ એફસ્ટ્રીમ <ચાર, ચાર _ ટ્રેઇટ્સ <ચાર>> માટે ઉપનામ છે, અથવા, બીજા શબ્દોમાં કહીએ તો, મૂળભૂત _ એફસ્ટ્રીમ મૂળભૂત અક્ષર કામગીરી સમૂહ સાથે ચાર પ્રકારનાં અક્ષરો પર કામ કરે છે. પુસ્તકાલયના વર્ગોને આશરે બે વર્ગોમાં વિભાજિત કરી શકાય છેઃ અમૂર્ત અને અમલીકરણ. વર્ગો, જે અમૂર્ત શ્રેણીમાં આવે છે, તે એક ઇન્ટરફેસ પ્રદાન કરે છે જે કોઈપણ પ્રકારના પ્રવાહ સાથે કામ કરવા માટે પૂરતું છે. આવા વર્ગોનો ઉપયોગ કરતો કોડ એ ચોક્કસ સ્થાન પર આધારિત નથી કે જ્યાંથી ડેટા વાંચવામાં આવે છે અથવા લખવામાં આવે છે. ઉદાહરણ તરીકે, આવા કોડ રિકમ્પિલેશન વિના ફાઇલ, મેમરી બફર અથવા વેબ સોકેટમાં ડેટા લખી શકે છે. અમલીકરણ વર્ગો એબ્સ્ટ્રેક્શન વર્ગોને વારસામાં મેળવે છે અને નક્કર પ્રકારના ડેટા સ્રોત અથવા સિંક માટે અમલીકરણ પ્રદાન કરે છે. લાઇબ્રેરી માત્ર ફાઇલ-આધારિત સ્ટ્રીમ્સ અને મેમરી બફર-આધારિત સ્ટ્રીમ્સ માટે અમલીકરણ પ્રદાન કરે છે. પુસ્તકાલયમાં વર્ગોને બે જૂથોમાં પણ વહેંચી શકાય છે, પછી ભલે તે નિમ્ન-સ્તરની કામગીરી કરે કે ઉચ્ચ-સ્તરની કામગીરી. જે વર્ગો નીચલા સ્તરની સામગ્રી સાથે વ્યવહાર કરે છે તેને સ્ટ્રીમ બફર કહેવામાં આવે છે. તેઓ કોઈપણ ફોર્મેટિંગ કાર્યક્ષમતા પ્રદાન કર્યા વિના અક્ષરો પર કામ કરે છે. આ વર્ગો ખૂબ જ ભાગ્યે જ સીધા ઉપયોગમાં લેવાય છે. ઉચ્ચ-સ્તરના વર્ગોને પ્રવાહો કહેવામાં આવે છે અને તે વિવિધ ફોર્મેટિંગ ક્ષમતાઓ પ્રદાન કરે છે. તેઓ સ્ટ્રીમ બફરની ટોચ પર બાંધવામાં આવ્યા છે. નીચેનું કોષ્ટક ઇનપુટ-આઉટપુટ લાઇબ્રેરી દ્વારા પૂરા પાડવામાં આવેલ તમામ વર્ગોની યાદી અને વર્ગીકરણ કરે છે. હેડર ફાઇલો ઇનપુટ/આઉટપુટ લાઈબ્રેરીના વર્ગો અનેક હેડરમાં રહે છે. <ios> માં ios _ આધાર અને મૂળભૂત _ ios વર્ગોની વ્યાખ્યાઓ છે, જે ફોર્મેટિંગ માહિતી અને સંકળાયેલ સ્ટ્રીમ-બફરનું સંચાલન કરે છે. <ISTREM> મૂળભૂત _ ISTREM વર્ગ નમૂનાની વ્યાખ્યા ધરાવે છે, જે ફોર્મેટ કરેલ ઇનપુટનો અમલ કરે છે. <ઓસ્ટ્રીમ> મૂળભૂત _ ઓસ્ટ્રીમ વર્ગ નમૂનાની વ્યાખ્યા ધરાવે છે, જે ફોર્મેટ કરેલ આઉટપુટનો અમલ કરે છે. <આઇઓસ્ટ્રીમ> મૂળભૂત _ આઇઓસ્ટ્રીમ વર્ગ નમૂનાની વ્યાખ્યા ધરાવે છે, જે ફોર્મેટ કરેલ ઇનપુટ અને આઉટપુટનો અમલ કરે છે, અને તેમાં <આઇઓએસ>, <ઇસ્ટ્રીમ> અને <ઓસ્ટ્રીમ> નો સમાવેશ થાય છે. <એફસ્ટ્રીમ> મૂળભૂત _ આઇએફસ્ટ્રીમ, મૂળભૂત _ ઓફસ્ટ્રીમ અને મૂળભૂત _ એફસ્ટ્રીમ વર્ગ નમૂનાઓની વ્યાખ્યાઓ ધરાવે છે જે ફાઇલ સ્ટ્રીમ્સ પર ફોર્મેટ કરેલ ઇનપુટ, આઉટપુટ અને ઇનપુટ/આઉટપુટનો અમલ કરે છે. <s stream> મૂળભૂત _ istring stream, મૂળભૂત _ ઓસ્ટ્રિંગસ્ટ્રીમ અને મૂળભૂત _ સ્ટ્રિંગસ્ટ્રીમ વર્ગ નમૂનાઓની વ્યાખ્યાઓ ધરાવે છે જે સ્ટ્રિંગ-આધારિત સ્ટ્રીમ્સ પર ફોર્મેટ કરેલ ઇનપુટ, આઉટપુટ અને ઇનપુટ/આઉટપુટનો અમલ કરે છે. <iomanip> ફોર્મેટિંગ મેનિપ્યુલેટર ધરાવે છે. <iosfwd> ઇનપુટ/આઉટપુટ લાઇબ્રેરીમાં તમામ વર્ગોની આગળની ઘોષણાઓ ધરાવે છે. સ્ટ્રીમ બફર કોષ્ટક તરીકે સી + + ભાષામાં વ્યાખ્યાયિત બાર સ્ટ્રીમ બફર વર્ગો છે. આધાર વર્ગો આઈ. ઓ. એસ. બેઝ અને બેઝિક આઈ. ઓ. એસ. એ બે વર્ગો છે જે પ્રવાહના નીચલા સ્તરના બિટ્સનું સંચાલન કરે છે. ios _ બેસ્ ફોર્મેટિંગ માહિતી અને પ્રવાહની સ્થિતિને સંગ્રહિત કરે છે. Basic _ ios સંકળાયેલ સ્ટ્રીમ-બફરનું સંચાલન કરે છે. બેઝિક _ આઇઓએસ સામાન્ય રીતે ફક્ત આઇઓએસ અથવા વિઓસ તરીકે ઓળખાય છે, જે ચોક્કસ અક્ષર પ્રકાર સાથે બેઝિક _ આઇઓએસ માટે બે ટાઇપડેફ છે. બેઝિક _ આઇઓએસ અને આઇઓએસ _ બેઝ ખૂબ જ ભાગ્યે જ પ્રોગ્રામરો દ્વારા સીધા ઉપયોગમાં લેવાય છે. સામાન્ય રીતે, તેમની કાર્યક્ષમતાને અન્ય વર્ગો જેમ કે આઇઓસ્ટ્રીમ દ્વારા એક્સેસ કરવામાં આવે છે જે તેમને વારસામાં મળે છે. ટાઈપડેફ ફોર્મેટિંગ મેનિપ્યુલેટર ઇનપુટ/આઉટપુટ સ્ટ્રીમ્સ C + + ઇનપુટ/આઉટપુટ સ્ટ્રીમ્સ મુખ્યત્વે iost stream દ્વારા વ્યાખ્યાયિત કરવામાં આવે છે, જે એક હેડર ફાઇલ છે જે C + + સ્ટાન્ડર્ડ લાઇબ્રેરીનો ભાગ છે (નામ ઇનપુટ/આઉટપુટ સ્ટ્રીમ માટે વપરાય છે). સી + + અને તેના પુરોગામી, સી પ્રોગ્રામિંગ ભાષામાં, ડેટા ઇનપુટ અથવા આઉટપુટને સ્ટ્રીમિંગ કરવા માટે કોઈ વિશેષ વાક્યરચના નથી. તેના બદલે, આને કાર્યોના પુસ્તકાલય તરીકે જોડવામાં આવે છે. C ના stdio.h માંથી વારસામાં મળેલા cstdio હેડરની જેમ, iost stream C + + પ્રોગ્રામ્સ માટે મૂળભૂત ઇનપુટ અને આઉટપુટ સેવાઓ પ્રદાન કરે છે. આઇઓસ્ટ્રીમ અનુક્રમે પ્રમાણભૂત સ્ટ્રીમ્સ ઇનપુટ, આઉટપુટ, એરર (અનબફર્ડ) અને લોગ (બફર્ડ) પર અને તેમાંથી ડેટા મોકલવા માટે ઓબ્જેક્ટ્સ cin, cout, cerr અને clog નો ઉપયોગ કરે છે. સી + + પ્રમાણભૂત પુસ્તકાલયના ભાગ રૂપે, આ પદાર્થો એસટીડી નેમસ્પેસનો એક ભાગ છે. કાઉટ ઓબ્જેક્ટ ઓસ્ટ્રીમ પ્રકારનો હોય છે, જે ડાબા બીટ-શિફ્ટ ઓપરેટરને ઓવરલોડ કરે છે જેથી તે બિટવાઇઝ કામગીરી સાથે સંપૂર્ણપણે અસંબંધિત કામગીરી કરે, અને નોંધપાત્ર રીતે ડાબી દલીલના મૂલ્યનું મૂલ્યાંકન કરે છે, જે સમાન ઓસ્ટ્રીમ ઓબ્જેક્ટ પર બહુવિધ કામગીરીને મંજૂરી આપે છે, આવશ્યકપણે પદ્ધતિ કાસ્કેડિંગ માટે અલગ વાક્યરચના તરીકે, અસ્ખલિત ઇન્ટરફેસને ખુલ્લી પાડે છે. સી. આર. આર. અને ક્લોગ ઓબ્જેક્ટ્સ પણ ઓસ્ટ્રીમ પ્રકારના હોય છે, તેથી તેઓ તે ઓપરેટરને પણ ઓવરલોડ કરે છે. સિન ઓબ્જેક્ટ ઇસ્ટ્રીમ પ્રકારનો છે, જે જમણા બીટ-શિફ્ટ ઓપરેટરને ઓવરલોડ કરે છે. બિટ-શિફ્ટ ઓપરેટરોની દિશાઓ એવું લાગે છે કે ડેટા આઉટપુટ સ્ટ્રીમ તરફ વહે છે અથવા ઇનપુટ સ્ટ્રીમથી દૂર વહે છે. આઉટપુટ ફોર્મેટિંગ પદ્ધતિઓ મેનિપ્યુલેટર મેનિપ્યુલેટર એવી વસ્તુઓ છે જે <<અથવા>> ઓપરેટર્સનો ઉપયોગ કરીને સ્ટ્રીમમાં ફેરફાર કરી શકે છે. અન્ય મેનિપ્યુલેટર હેડર આઇઓમાનિપનો ઉપયોગ કરીને શોધી શકાય છે. ટીકા ફોર્મેટિંગ મેનિપ્યુલેટરને અંતે "રીસેટ" કરવું આવશ્યક છે અથવા પ્રોગ્રામર અનપેક્ષિત રીતે આગામી આઉટપુટ સ્ટેટમેન્ટ પર તેમની અસરો મેળવશે. સી + + સ્ટાન્ડર્ડ લાઈબ્રેરીના કેટલાક અમલીકરણમાં નોંધપાત્ર પ્રમાણમાં ડેડ કોડ છે. ઉદાહરણ તરીકે, જીએનયુ libstdc + + ઓસ્ટ્રીમ બનાવતી વખતે આપમેળે લોકેલ બનાવે છે, પછી ભલે કોઈ પ્રોગ્રામ ક્યારેય કોઈ પ્રકાર (તારીખ, સમય અથવા નાણાં) નો ઉપયોગ ન કરે કે જે લોકેલને અસર કરે છે, અને સ્થિર રીતે જોડાયેલ "હેલો, વર્લ્ડ!" જી. એન. યુ. libstdc + + ના <iost stream> નો ઉપયોગ કરતો પ્રોગ્રામ, <cstdio> નો ઉપયોગ કરતા સમકક્ષ પ્રોગ્રામ કરતાં મોટી માત્રાનો એક્ઝેક્યુટેબલ ક્રમ ઉત્પન્ન કરે છે. જગ્યા-મર્યાદિત વાતાવરણ માટે રચાયેલ C + + પ્રમાણભૂત પુસ્તકાલયના આંશિક અમલીકરણ અસ્તિત્વમાં છે; તેમના <iost stream> એવા લક્ષણોને છોડી શકે છે કે જે આવા વાતાવરણમાં પ્રોગ્રામ્સને જરૂર ન હોય, જેમ કે લોકેલ સપોર્ટ. નામકરણ સંમેલનો ઉદાહરણો પ્રમાણભૂત "હેલો, વર્લ્ડ!" પ્રોગ્રામને નીચે પ્રમાણે વ્યક્ત કરી શકાય છેઃ #include <iost stream> પૂર્ણાંક મુખ્ય () {std:: cout <<"હેલો, વર્લ્ડ!" <<std:: એન્ડલ;} આ પ્રોગ્રામ આઉટપુટ કરશે "હેલો, વર્લ્ડ!" ત્યારબાદ નવી લાઇન અને પ્રમાણભૂત આઉટપુટ સ્ટ્રીમ બફર ફ્લશ આવે છે. નીચેનું ઉદાહરણ 'file.txt' નામની ફાઇલ બનાવે છે અને 'હેલો, વર્લ્ડ!' લખાણ મૂકે છે. ત્યારબાદ તેમાં એક નવી લાઇન આવે છે. #include <f stream> int મુખ્ય () {std:: ઓફસ્ટ્રીમ ફાઇલ ("file.txt"); ફાઇલ <<"હેલો, વર્લ્ડ!" સંદર્ભો ઇનપુટ/આઉટપુટ લાઈબ્રેરી માટે બાહ્ય લિંક્સ C + + સંદર્ભ અપાચે C + + સ્ટાન્ડર્ડ લાઈબ્રેરી આયોસ્ટ્રીમ્સ C + + C + + C + + સ્ટાન્ડર્ડ લાઈબ્રેરીમાં આઉટપુટ ફોર્મેટિંગ પર વ્યાપક ટ્યુટોરીયલ ઉદાહરણ તરીકે C + + કોડ સાથે લેખો