लिनक्स में माउस घटनाएँ कैसे काम करती हैं?


25

यह ज्यादातर जिज्ञासा से बाहर है, मैं यह समझने की कोशिश कर रहा हूं कि इवेंट हैंडलिंग एक निम्न स्तर पर कैसे काम करता है, इसलिए कृपया मुझे एक सॉफ़्टवेयर का संदर्भ न दें जो मेरे लिए यह करेंगे।

यदि उदाहरण के लिए, मैं C / C ++ में एक प्रोग्राम लिखना चाहता हूं जो माउस क्लिक पर प्रतिक्रिया करता है, तो मुझे लगता है कि मुझे कुछ फ़ंक्शन को कर्नेल पर हुक करने के लिए एक सिस्टम कॉल का उपयोग करने की आवश्यकता है, या शायद आपको माउस की स्थिति की लगातार जांच करने की आवश्यकता है, मुझे नहीं पता।

मुझे लगता है कि यह संभव है क्योंकि सी / सी ++ में सब कुछ संभव है, इतने निचले स्तर पर होने के नाते, मैं ज्यादातर इस बात में दिलचस्पी रखता हूं कि यह कैसे काम करता है, भले ही मुझे शायद इसे खुद लागू नहीं करना पड़े।

सवाल यह है कि यह लिनक्स में कैसे काम करता है, क्या कुछ सिस्टम कॉल, लाइब्रेरी आदि हैं?

जवाबों:


28

यदि आप लिनक्स में माउस का उपयोग करने वाले वास्तविक दुनिया का प्रोग्राम लिख रहे हैं, तो आप सबसे अधिक एक्स एप्लीकेशन लिखने की संभावना रखते हैं, और उस स्थिति में आपको माउस घटनाओं के लिए एक्स सर्वर से पूछना चाहिए। Qt , GTK , और libsdl कुछ लोकप्रिय सी लाइब्रेरी हैं जो GUI प्रोग्राम लिखने के लिए आवश्यक माउस, कीबोर्ड, ग्राफिक्स, टाइमर और अन्य सुविधाओं तक पहुँचने के लिए कार्य प्रदान करते हैं। Ncurses टर्मिनल अनुप्रयोगों के लिए एक समान पुस्तकालय है।

लेकिन अगर आप अपने सिस्टम को खोज रहे हैं, या आप X का उपयोग किसी भी कारण से नहीं कर सकते हैं, तो यहां बताया गया है कि यह कर्नेल इंटरफ़ेस पर कैसे काम करता है।

UNIX दर्शन में एक मुख्य विचार यह है कि "सब कुछ एक फ़ाइल है"। अधिक विशेष रूप से, जितनी संभव हो उतनी चीजें उसी सिस्टम कॉल के माध्यम से सुलभ होनी चाहिए जो आप फ़ाइलों के साथ काम करने के लिए उपयोग करते हैं। और इसलिए माउस को कर्नेल इंटरफ़ेस एक डिवाइस फ़ाइल है। आप open()इसे, आने वाले डेटा को देखने के लिए वैकल्पिक रूप से कॉल poll()या इस select()पर, और डेटा read()को पढ़ने के लिए।

प्री-यूएसबी समय में, विशिष्ट डिवाइस फ़ाइल अक्सर एक सीरियल पोर्ट, जैसे /dev/ttyS0, या एक पीएस / 2 पोर्ट, होती है /dev/psaux। आपने माउस में जो भी हार्डवेयर प्रोटोकॉल बनाया था उसका उपयोग करके माउस से बात की। इन दिनों, /dev/input/*सबसिस्टम को प्राथमिकता दी जाती है, क्योंकि यह कई अलग-अलग इनपुट डिवाइसों को संभालने का एकीकृत, डिवाइस-स्वतंत्र तरीका प्रदान करता है। विशेष रूप से, /dev/input/miceआपको आपके सिस्टम से जुड़े किसी भी माउस से ईवेंट /dev/input/mouseNदेगा , और आपको एक विशेष माउस से ईवेंट देगा। अधिकांश आधुनिक लिनक्स वितरणों में, ये फाइलें गतिशील रूप से बनाई जाती हैं जब आप माउस में प्लग करते हैं।

माउस डिवाइस फ़ाइल को आप क्या पढ़ेंगे या लिखेंगे, इसके बारे में अधिक जानकारी के लिए, आप कर्नेल प्रलेखन में इनपुट / input.txt से शुरू कर सकते हैं । विशेष रूप से खंड २.२.२ (मूसदेव) और ३.२.४ (ईदेव) में देखें, और खंड ४ और ५ में भी।


8

आम तौर पर, डिवाइस फ़ाइलों के माध्यम से हार्डवेयर उपकरणों की जानकारी अनुप्रयोगों के संपर्क में आती है । चूहों के लिए, आधुनिक लिनक्स सिस्टम पर, डिवाइस है /dev/mice(यह डिवाइस सभी जुड़े चूहों से घटनाओं को इकट्ठा करता है, प्रत्येक व्यक्तिगत माउस के अनुरूप डिवाइस भी हैं)।

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

यदि इस उपकरण के संगत डिवाइस फ़ाइल से कोई भी एप्लिकेशन पढ़ रहा है, तो उस एप्लिकेशन को बताया जाता है कि इनपुट प्रतीक्षा कर रहा है। उदाहरण के लिए, यदि एप्लिकेशन सिस्टम कॉल में अवरुद्ध है , तो सिस्टम कॉल रिटर्न देता है।read

एक विशिष्ट प्रणाली पर, चूहों की घटनाओं को पढ़ने की एक प्रक्रिया है: एक्स विंडो सर्वर । यह कार्यक्रम चित्रमय प्रदर्शन और इनपुट बाह्य उपकरणों का प्रबंधन करता है। व्यक्तिगत चित्रमय अनुप्रयोगों को तब एक जेनेरिक एक्स ईवेंट प्रोटोकॉल के माध्यम से माउस घटनाओं के बारे में सूचित किया जाता है, जो अन्य ईवेंट प्रकारों जैसे कि कुंजी प्रेस, विंडो फ़ोकस परिवर्तन, विंडो दृश्यता परिवर्तन,…

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.