Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में इनपुट और आउटपुट (आईओ):निश्चित गाइड

I/O का मतलब इनपुट/आउटपुट है।

इनपुट से हमारा मतलब उन सभी डेटा और सूचनाओं से है जो किसी चीज़ में आती हैं (कंप्यूटर, रूबी विधि, आपका दिमाग)।

इनपुट के उदाहरण :

  • कीबोर्ड पर आपके प्रेस की कुंजी
  • माउस क्लिक
  • आपके द्वारा पढ़ी जाने वाली पुस्तकें

आउटपुट से हमारा मतलब वह सब कुछ है जो इनपुट के परिणामस्वरूप निकलता है।

आउटपुट के उदाहरण :

  • 1 + 1 का परिणाम
  • आपके द्वारा पढ़े गए लेख का सारांश लिखना
  • कॉफ़ी

रूबी में, जब हम i/o के बारे में बात करते हैं तो हम आमतौर पर फाइलों को पढ़ने, नेटवर्क सॉकेट के साथ काम करने और स्क्रीन पर प्रिंटिंग जानकारी का उल्लेख करते हैं।

आईओ क्लास को समझना

रूबी में IO भी एक वर्ग है।

यह अन्य वस्तुओं जैसे File . के लिए मूल वर्ग है &Socket

सभी IO ऑब्जेक्ट्स में ये ऑपरेशन होते हैं :

  • खोलें / बंद करें
  • पढ़ें
  • लिखें

IO ऑब्जेक्ट फाइल डिस्क्रिप्टर पर आधारित होते हैं ।

आपके कंप्यूटर में चलने वाली प्रत्येक प्रक्रिया में एक आंतरिक सूचना तालिका होती है।

इस तालिका के भाग में फ़ाइल वर्णनकर्ताओं की सूची शामिल है।

एक फ़ाइल डिस्क्रिप्टर एक पूर्णांक और एक फ़ाइल नाम के बीच एक मानचित्रण है

आप लिनक्स में फाइल डिस्क्रिप्टर की यह सूची देख सकते हैं।

इस आदेश के साथ :

# Assuming you have irb open on another window

ls -lh /proc/`pgrep irb`/fd/

# lrwx------ 1 jesus jesus 64 Feb  3 15:54 0 -> /dev/pts/3
# lrwx------ 1 jesus jesus 64 Feb  3 15:54 1 -> /dev/pts/3
# lrwx------ 1 jesus jesus 64 Feb  3 15:54 2 -> /dev/pts/3

आप रूबी में sysopen . के साथ एक नया फ़ाइल डिस्क्रिप्टर बना सकते हैं विधि।

उदाहरण :

fd = IO.sysopen('/dev/null', 'w')

# 10

अब आप इस फाइल डिस्क्रिप्टर के साथ एक संचार चैनल खोल सकते हैं (10 )।

इसे पसंद करें :

io = IO.new(fd)

और उसे लिखें :

io << 'orange'

ध्यान दें कि IO इस बात से कोई फ़र्क नहीं पड़ता कि आपकी फ़ाइल डिस्क्रिप्टर किसी वास्तविक फ़ाइल, डिवाइस (हार्ड डिस्क की तरह), या नेटवर्क सॉकेट से मैप करता है या नहीं।

लिखने के लिए फाइल डिस्क्रिप्टर कैसे खोलें

जब आप sysopen . का उपयोग करके एक नया फ़ाइल डिस्क्रिप्टर बनाते हैं , या File.open . का उपयोग करके कोई फ़ाइल खोलें , आपके पास कुछ विकल्प हैं।

डिफ़ॉल्ट रूप से संचार केवल पढ़ने के लिए होता है।

आप एक मोड निर्दिष्ट कर सकते हैं :

  • r (पढ़ें, डिफ़ॉल्ट)
  • w (लिखें)
  • w+ (पढ़ें और लिखें)
  • a (संलग्न करें)

उदाहरण :

fd = IO.sysopen('/dev/tty1', 'w+')

यह /dev/tty1 opens खोलता है रीड + राइट मोड के साथ।

3 मानक IO स्ट्रीम

जब आप एक नया प्रोग्राम खोलते हैं (आपका संपादक, टर्मिनल, रूबी दुभाषिया, आदि) तो यह डिफ़ॉल्ट रूप से संचार के 3 चैनल खोलता है।

3 फाइल डिस्क्रिप्टर।

वे हैं :

  • स्टडिन (इनपुट)
  • स्टडआउट (आउटपुट)
  • stderr (त्रुटियां)

रूबी में आप उनके स्थिर रूप, या उनके वैश्विक चर रूप का उपयोग करके सीधे इन तक पहुंच सकते हैं।

उदाहरण :

$stdout << "abc\n"

जब आप $stdout . को लिखते हैं , यह पुट मेथड को कॉल करने जैसा ही है।

मानक आउटपुट आपके टर्मिनल से जुड़ा है।

lrwx------ 1 jesus jesus 64 Feb  3 15:54 0 -> /dev/pts/3

यह /dev/pts/3 एक वर्चुअल डिवाइस है जिसे आपका टर्मिनल स्क्रीन पर टेक्स्ट प्रदर्शित करने के लिए पढ़ता है।

मानक त्रुटि आउटपुट के लिए भी उपयोग किया जाता है, लेकिन यह आपके टर्मिनल को इस सामग्री को एक अलग तरीके से प्रस्तुत करने का मौका देता है, जैसे कि बड़े फ़ॉन्ट में, या नियमित टेक्स्ट से भिन्न रंग में।

आप warn . का उपयोग कर सकते हैं मानक त्रुटि पर प्रिंट करने की विधि।

मानक इनपुट वह जगह है जहां से उपयोगकर्ता इनपुट पढ़ा जाता है।

आप gets . का उपयोग कर सकते हैं मानक इनपुट से पढ़ने की विधि।

STDOUT को कैसे फ्लश करें और बफरिंग को अक्षम कैसे करें

IO ऑब्जेक्ट में एक आंतरिक बफर होता है।

इनपुट डेटा को पढ़ने से पहले एक निश्चित मात्रा में सहेजा जाएगा

इसलिए कभी-कभी आप puts . का उपयोग करते हैं ...

लेकिन जब तक प्रोग्राम समाप्त नहीं हो जाता, या बफर भर जाता है तब तक आपको कुछ भी दिखाई नहीं देता!

आप इस तरह बफ़रिंग को अक्षम कर सकते हैं :

$stdout.sync = true

या आप बफ़र को मैन्युअल रूप से फ़्लश कर सकते हैं :

$stdout.flush

बफ़र अक्षम होने पर आप बिना प्रतीक्षा किए आउटपुट देखेंगे।

भाग में पढ़ना

जब आप किसी IO ऑब्जेक्ट से पढ़ रहे होते हैं, तो आप read जब तक स्ट्रीम एक END-OF-FILE (EOF) सिग्नल के साथ समाप्त नहीं हो जाती, तब तक स्ट्रीम बंद हो जाती है, या आपको एक विशिष्ट मात्रा में बाइट्स प्राप्त होते हैं।

नेटवर्क प्रोग्रामिंग और बड़ी फ़ाइलों के लिए, छोटे टुकड़ों में पढ़ना मददगार होता है।

आप इस तरह टुकड़ों में पढ़ सकते हैं :

data = ""

until io.eof?
  data << io.read(2048)
end

इस कोड के साथ आप डेटा के उपलब्ध होते ही संसाधित कर सकते हैं, संपूर्ण डाउनलोड समाप्त होने की प्रतीक्षा किए बिना।

ध्यान दें कि eof? "ब्लॉक" करेगा।

ब्लॉक करने का मतलब है कि आपका कोड सोने . तक चलेगा ऑपरेटिंग सिस्टम संकेत देता है कि पढ़ने के लिए नया डेटा . है ।

दोतरफा संचार के लिए IO पाइप्स का उपयोग कैसे करें

रूबी आपको पाइप बनाने की अनुमति देती है।

एक पाइप फाइल डिस्क्रिप्टर की एक जोड़ी है जो एक दूसरे से जुड़े होते हैं।

इसका उपयोग इंटर-प्रोसेस कम्युनिकेशन (आईपीसी) के लिए किया जाता है।

उदाहरण :

read, write = IO.pipe

आप इसका उपयोग fork . के साथ कर सकते हैं विधि (विंडोज़ में उपलब्ध नहीं) वर्तमान प्रक्रिया की एक प्रति बनाने के लिए।

ये दो प्रक्रियाएं पाइप का उपयोग करके संचार कर सकती हैं।

उदाहरण :

if fork
  write.close

  puts "Message received: #{read.gets}"

  read.close
else
  read.close

  write << "Buy some bananas!"

  write.close
end

जिसका परिणाम होता है :

# Message received: Buy some bananas!

कर्नेल ओपन विधि का उपयोग कैसे करें

रूबी का एक बहुत ही लचीला open है विधि।

यह आपको फ़ाइलों को खोलने और URL से डेटा पढ़ने और यहां तक ​​कि बाहरी कमांड चलाने के लिए पाइप खोलने की अनुमति देता है।

उदाहरण :

open "abc.txt"

इसलिए इस विधि से बचना चाहिए

यह एक सुरक्षा जोखिम है कि यह ये सब काम कर सकता है।

इसके बजाय, विशिष्ट open . का उपयोग करना बेहतर है विधि जो आपको चाहिए।

उदाहरण :

File.open           # File
IO.popen            # Process open
URI.parse(...).open # URL open

ये सभी एक IO लौटाते हैं वस्तु।

सारांश

आपने रूबी में इनपुट/आउटपुट के बारे में सीखा है! आपने फाइल डिस्क्रिप्टर के बारे में सीखा है, IO वर्ग, बफरिंग, भागों में पढ़ना और मानक IO धाराएँ।

रूबी में इनपुट और आउटपुट (आईओ):निश्चित गाइड

अगर आपको यह लेख पसंद आए तो इसे शेयर करना न भूलें।

पढ़ने के लिए धन्यवाद।


  1. रूबी डेवलपर्स के लिए समय की जटिलता के लिए निश्चित गाइड

    समय जटिलता सबसे दिलचस्प अवधारणाओं में से एक है जिसे आप कंप्यूटर विज्ञान से सीख सकते हैं, और आपको इसे समझने के लिए किसी डिग्री की आवश्यकता नहीं है! यह दिलचस्प है क्योंकि इससे आपको यह देखने में मदद मिलती है कि कोई विशेष एल्गोरिदम या प्रोग्राम धीमा क्यों हो सकता है और इसे और तेज़ बनाने के लिए आप क्या

  1. रूबी में कार्यात्मक प्रोग्रामिंग (पूर्ण गाइड)

    हो सकता है कि आपने अभी कार्यात्मक प्रोग्रामिंग के बारे में सुना हो और आपके कुछ प्रश्न हों। लाइक... कार्यात्मक प्रोग्रामिंग वास्तव में क्या है? यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से कैसे तुलना करता है? क्या आपको रूबी में कार्यात्मक प्रोग्रामिंग का उपयोग करना चाहिए? आइए मैं आपके लिए इन सवालों के जव

  1. रूबी एन्यूमरेबल मॉड्यूल के लिए एक बुनियादी गाइड (+ मेरी पसंदीदा विधि)

    एन्यूमरेबल क्या है? एन्यूमरेबल पुनरावृत्ति विधियों का संग्रह . है , एक रूबी मॉड्यूल, और जो रूबी को एक महान प्रोग्रामिंग भाषा बनाता है उसका एक बड़ा हिस्सा। एन्यूमरेबल में उपयोगी तरीके शामिल हैं जैसे : map select inject असंख्य तरीके उन्हें एक ब्लॉक देकर काम करते हैं। उस ब्लॉक में आप उन्हें बत