मैं सोच रहा हूं कि scanf()/printf() वास्तव में हार्डवेयर और ओएस स्तरों में कैसे काम करता है। डेटा प्रवाह कहां और ओएस इन समय के आसपास क्या कर रहा है? ओएस क्या कॉल करता है? और इतने पर ...ओएस के अंदर scanf() कैसे काम करता है?
उत्तर
स्कैनफ़() और printf() libc (सी मानक लाइब्रेरी) में कार्यरत हैं, और क्रमशः फ़ाइल डिस्क्रिप्टर stdin और stdout से बात करते हुए वे क्रमशः पढ़ने() और लिखने() ऑपरेटिंग सिस्टम सिस्को कहते हैं (fscanf और fprintf आपको उस फ़ाइल स्ट्रीम को निर्दिष्ट करने की अनुमति देता है जिसे आप पढ़ना/लिखना चाहते हैं)।
पढ़ने के लिए कॉल() और लिखना() (और सभी सिस्कोल्स) परिणामस्वरूप आपके उपयोगकर्ता-स्तरीय अनुप्रयोग से कर्नेल मोड में 'संदर्भ स्विच' होता है, जिसका अर्थ यह है कि यह विशेषाधिकार प्राप्त संचालन कर सकता है, जैसे कि सीधे हार्डवेयर से बात करना । पर कैसे आप आवेदन शुरू कर दिया निर्भर करता है, 'stdin' और 'stdout' फ़ाइल वर्णनकर्ता शायद एक कंसोल डिवाइस (जैसे tty0 के रूप में), या (एक xterm द्वारा उजागर की तरह) आभासी कंसोल डिवाइस के कुछ प्रकार के लिए बाध्य कर रहे हैं। पढ़ें() और लिखें() एक 'यूओ' नामक कर्नेल बफर से डेटा को सुरक्षित रूप से कॉपी करें। scanf और printf की
प्रारूप स्ट्रिंग रूपांतरण हिस्सा कर्नेल मोड में नहीं होती है, लेकिन सिर्फ साधारण उपयोगकर्ता मोड (अंदर 'libc') में, syscalls साथ अंगूठे का सामान्य नियम आप मोड कर्नेल के लिए स्विच के रूप में बार बार के रूप में है संभव है, दोनों संदर्भ स्विचिंग के प्रदर्शन ओवरहेड से बचने के लिए, और सुरक्षा के लिए (आपको कर्नेल मोड में होने वाली किसी भी चीज के बारे में बहुत सावधान रहना होगा! कर्नेल मोड में कम कोड ऑपरेटिंग सिस्टम में कम बग/सुरक्षा छेद का मतलब है)।
btw .. यह सब एक यूनिक्स के नजरिए से लिखा गया था, मैं नहीं जानता कि कैसे एमएस विंडोज काम करता है।
संदर्भ स्विच धीमा लगता है अगर यह अलग-अलग प्रत्येक बाइट को पढ़ता है। बेशक, यह वास्तव में इस दिन और उम्र में कोई फर्क नहीं पड़ता है, लेकिन मुझे यह जानने में दिलचस्पी है कि मैं इस समझ में सही हूं या नहीं। –
पढ़ने और लिखने syscalls बाइट्स मानकों के रूप यूआईओ के माध्यम से हस्तांतरण करने के लिए के एक नंबर ले, तो यह हर एक बाइट के लिए एक अलग syscall बनाने के लिए नहीं है। आप यह भी सोचेंगे कि getchar() जैसे सरल इनपुट फ़ंक्शंस के लिए प्रत्येक चरित्र के लिए एक अलग कॉल होना होगा, लेकिन वास्तव में इन दिनों libc उस से थोड़ा सा चालाक है और यह एक बफर (libc के अंदर) रखता है। तो यह संदर्भ बफर को भरकर बहुत से संदर्भ स्विचिंग के प्रदर्शन ओवरहेड से बच सकता है, फिर जब भी बफर खाली होता है, तब तक प्रत्येक बार जब आप getchar() या scanf() को प्रोसेस करते हैं, और केवल तब एक और सिस्कल बनाते हैं। –
"इस दिन में वास्तव में कोई फर्क नहीं पड़ता" के विषय पर, वास्तव में आपको आश्चर्य होगा कि हर समय सिस्कोल कितनी महत्वपूर्ण प्रदर्शन को प्रभावित करेगा। इस बात पर विचार करें कि नियमित कार्य कॉल के रूप में कम से कम * 10 गुना धीमा है। यदि आपके पास आकार 1024 बाइट्स का बफर है, उदाहरण के लिए, आप केवल 1/1024 को कई सिस्को बना रहे हैं।बफर के साथ और बिना 'सीपी' कमांड का सी कार्यान्वयन लिखना एक अच्छा उदाहरण है, मैं इसे कुछ मिनटों में पोस्ट करूंगा। –
मुझे लगता है कि ओएस सिर्फ दूर कैसे आउटपुट डेटा प्रस्तुत या जहां इनपुट डेटा से आता हो जाता है दो धाराओं, उत्पादन के लिए इनपुट के लिए एक और अन्य, नदियों सार प्रदान करता है।
तो स्कैनफ़ & printf क्या कर रहे हैं बस किसी भी स्ट्रीम से बाइट्स (या उपभोग बाइट्स) जोड़ रहे हैं।
यह उच्च स्तरीय अमूर्त है। मैं यह जानना चाहता हूं कि ये स्ट्रीम हार्डवेयर के साथ कैसे काम करती हैं और ओएस कैसे सभी डेटा प्रबंधित करता है। – jetru
मेरी OS पर मैं scanf और printf के साथ काम कर रहा हूँ कार्यों getch पर आधारित होते हैं() चींटी putch()।
वाह वह कुछ था। जब एकल क्लाइंट कनेक्ट होता था तब मैं यूआरटी से टीसीपी/आईपी तक आउटपुट बदलने में कामयाब रहा। यह एम्बेडेड सिस्टम के लिए सरल गैर प्रीपेप्टिव सहकारी माइक्रोक्रोनल था। –
- 1. एचटीएमएल टैग स्क्रिप्ट टैग के अंदर कैसे काम करता है?
- 2. ओएस एक्स माउंटेन शेर: path_helper कैसे काम करता है?
- 3. मूल्यांकन [] बटन के अंदर काम नहीं करता प्रतीत होता है []
- 4. पढ़ scanf
- 5. एक div के अंदर शीर्ष मार्जिन काम नहीं करता है?
- 6. कैसे malloc काम करता है?
- 7. प्रेषक कैसे काम करता है?
- 8. डॉटफस्केटर कैसे काम करता है?
- 9. कैसे काम करता है?
- 10. back_inserter कैसे काम करता है?
- 11. scanf गतिशील आवंटन
- 12. सरल सी स्कैनफ़ काम नहीं करता है?
- 13. vmware कैसे काम आसान स्थापित करता है?
- 14. setMicrophoneMute() कैसे काम करता है?
- 15. सी getchar बनाम scanf
- 16. सी: एकाधिक scanf का, जब मैं एक scanf के लिए एक मूल्य में दर्ज यह दूसरा scanf
- 17. क्यों नहीं करता है SegueWithIdentifier viewDidLoad के अंदर काम करता है?
- 18. लिंक यूआई के अंदर काम नहीं करता चयन
- 19. कैसे लूप के लिए रिकर्सन वर्क्स के अंदर काम करता है
- 20. एक संकलित प्रोग्राम ओएस के साथ कैसे सहभागिता करता है?
- 21. कैसे "==" वस्तुओं के लिए काम करता है?
- 22. के-मतलब ++ कैसे काम करता है?
- 23. ड्रॉपबॉक्स कैसे काम करता है?
- 24. ArrayAccess कैसे काम करता है?
- 25. ओमेगल कैसे काम करता है?
- 26. डिगबार कैसे काम करता है?
- 27. RedirectToRouteResult कैसे काम करता है?
- 28. GetModuleHandle() कैसे काम करता है?
- 29. PyArg_ParseTupleAndKeywords कैसे काम करता है?
- 30. रीडिस कैसे काम करता है?
आप के बारे में क्या बात कर रहे हैं ओएस? –
अधिक जानकारी की आवश्यकता है, – rahul
मैं किसी भी विशेष ओएस को नहीं देख रहा हूं। लिनक्स/यूनिक्स प्रकार ठीक होंगे। मैं सिर्फ स्थिति की बुनियादी समझ चाहता हूं। – jetru