c - How does the STDIN buffer and getchar() pointer change during successive calls? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 1 उत्तर

stdin बफर में इनपुट दिया गया है , जब प्राप्तकर्त्ता को लगातार कॉल किया जाता है, तो स्टडिन बफर के स्मृति पते के साथ पॉइंटर चाल होता है, जिससे प्रत्येक पते पर मूल्य प्राप्त करने के लिए getchar () हो सकता है? यदि हां, तो वे एक बार पुनः प्राप्त किए गए हैं, तो मान हटाए जाते हैं और फिर सूचक बढ़ता है?

आम तौर पर लूप में getchar () की मेरी समझ इस तर्क का अनुसरण करती है:

  1. getchar
  2. इनपुट के लिए stdin बफर की जांच
  3. अगर स्टैडीन बफर खाली है, getchar () सोता है
  4. उपयोगकर्ता इनपुट में प्रवेश करता है और जागता है char मिल ()
  5. स्टडिन बफर
  6. स्टडिन बफर
  7. स्टाकइन बफर
  8. getchar () स्टाडिन बफर की शुरुआत में पते पर मान को पुनः प्राप्त करता है
  9. मान

इसी तरह के प्रश्न से पहले पूछा गया था लेकिन मुझे समझने में परेशानी थी प्रतिक्रियाएं।

आम तौर पर एक stdio आंतरिक बफर होता है Getchar () बफर में पढ़ने वाली रेखा को ट्रिगर कर सकता है, और आम तौर पर बाद के कॉल पर, यह केवल एक सूचक को बढ़ेगा जब तक कि सूचक वर्तमान डेटा के बफ़र में समाप्त न हो जाए। कार्यान्वयन आमतौर पर एक सरल आंतरिक कक्ष का उपयोग करता है * कुछ बिंदुओं और राज्य चर (एस) के साथ, गतिशील स्मृति का एक अंतर्निहित हिस्सा है।

कार्यान्वयन में भिन्नता है, मुझे POSIX मानक को याद नहीं है जो सामान्य तौर पर, getchar () या एसटीडीओ धाराओं के आंतरिक कार्यान्वयन को छोड़कर, उस दिए गए कार्यों को समर्थन दिया जाना चाहिए।

अगर मुझे याद आती है, तो कुछ कार्यान्वयन बंटे हैं (मुझे लगता है कि मैंने इस्तेमाल किया डॉस संकलक बफर नहीं था), लेकिन वहां किसी दिए गए ओएस के लिए कई मानक विधायी कार्यान्वयन हैं।

एक ही सिस्टम पर 2 stdio libs होना असामान्य नहीं है, उदाहरण: एआईएस, सोलारिस, एचपीयूएक्स, और अन्य गैर-लिनक्स / बीएसडी के प्रबंधन के लिए sys-admins यूनिक्स प्लेटफार्म अक्सर जीसीसी के उपकरण पाने के लिए जीएनयू स्टैक स्थापित करेगा, और उस स्टैक में ग्लिबिक (जीएनयू एलबीसी) शामिल होगा।

आप एक मुफ्त ऑनलाइन / मुफ्त डाउनलोड स्रोत डाउनलोड कर सकते हैं। Glibc देखें।

यदि यह मदद करता है, तो मान लें कि stdio झांकना प्रदान करता है और कार्यक्षमता को कम कर देता है, और ऐसा करने का एकमात्र तरीका टर्मिनल और उपयोगकर्ता प्रोग्राम के बीच एक आंतरिक बफर है।


Comments

Popular posts from this blog

java - org.apache.http.ProtocolException: Target host is not specified -

java - Gradle dependencies: compile project by relative path -

ruby on rails - Object doesn't support #inspect when used with .include -