Fare olayları Linux'ta nasıl çalışır?


25

Bu çoğunlukla meraktan uzak, olay işlemenin düşük seviyede nasıl çalıştığını anlamaya çalışıyorum, bu yüzden lütfen benim için yapacak bir yazılıma atıfta bulunmayın.

Örneğin, C / C ++ dilinde fare tıklamaları ile tepki veren bir program yazmak istersem, bazı işlevleri çekirdeğe bağlamak için bir sistem çağrısı kullanmam gerektiğini ya da farenin durumunu sürekli olarak kontrol etmeniz gerektiğini düşünüyorum. Bilmiyorum.

C / C ++ 'da hemen hemen her şey mümkün olduğundan, çok düşük seviyeli olduğundan, muhtemelen nasıl çalıştığımla ilgileniyorum, muhtemelen kendim uygulamak zorunda kalmamama rağmen.

Soru Linux'da nasıl çalıştığı, belirli sistem çağrıları, kütüphaneler vb. Var mı?

Yanıtlar:


28

Linux'ta fareyi kullanan bir gerçek dünya programı yazıyorsanız, büyük olasılıkla bir X uygulaması yazıyorsunuz ve bu durumda X sunucusundan fare olaylarını sormalısınız. Qt , GTK ve libsdl , GUI programlarını yazmak için gerekli olan fareye, klavyeye, grafiklere, zamanlayıcılara ve diğer özelliklere erişmek için işlevler sağlayan bazı popüler C kütüphaneleridir. Ncurses , terminal uygulamaları için benzer bir kütüphanedir.

Fakat sisteminizi araştırıyorsanız veya herhangi bir nedenle X'i kullanamıyorsanız, işte çekirdek arayüzünde nasıl çalıştığı.

UNIX felsefesindeki temel fikir "her şey bir dosya" dır. Daha spesifik olarak, mümkün olduğu kadar çok şeye dosyalarla çalışmak için kullandığınız aynı sistem çağrıları yoluyla erişilebilir olmalıdır. Ve böylece farenin çekirdek arayüzü bir cihaz dosyasıdır. Size open(), isteğe bağlı olarak gelen veri olup olmadığını görmek ve verileri okumak için arayın poll()veya arayın .select()read()

USB öncesi zamanlarda, belirli bir aygıt dosyası genellikle bir seri bağlantı noktasıydı, örneğin /dev/ttyS0ya da bir PS / 2 bağlantı noktasıydı /dev/psaux. Hangi donanım protokolünü kullanıyorsanız fareyle fareyle konuştunuz. Bu günlerde, /dev/input/*birçok farklı giriş cihazının kullanımı için birleşik, cihazdan bağımsız bir yol sağladığı için alt sistem tercih edilir. Özellikle, /dev/input/micesisteminize bağlı herhangi bir fareden /dev/input/mouseNolayları verecek ve belirli bir fareden olayları verecek. Çoğu modern Linux dağıtımında, bu dosyalar bir fareyi taktığınızda dinamik olarak oluşturulur.

Fare aygıtı dosyasına tam olarak ne okuyup yazacağınız hakkında daha fazla bilgi için , çekirdek belgelerinde input / input.txt ile başlayabilirsiniz . Özellikle 3.2.2 (mousedev) ve 3.2.4 (evdev) bölümlerine ve ayrıca 4. ve 5. bölümlere bakın.


8

Genel olarak, donanım cihazlarından gelen bilgiler, cihaz dosyaları aracılığıyla uygulamalara maruz kalır . Fareler için, modern Linux sistemlerinde, aygıt /dev/mice(bu aygıt bağlı tüm farelerden olay toplar, ayrıca her bir fareye karşılık gelen aygıtlar da vardır).

Fareyi hareket ettirdiğinizde veya tıkladığınızda, fare bilgisayara bir kesme sinyali göndermesine neden olan bir elektrik sinyali gönderir . Linux çekirdeğindeki bir kesme işleyicisi olarak adlandırılan bir kod parçası olay verilerini okur (örneğin hangi düğmeye basıldı) ve çekirdeğin içindeki bir bildirim zincirini tetikler.

Bu cihaza karşılık gelen cihaz dosyasından okuyan herhangi bir uygulama varsa, o uygulamaya girişin beklediği söylenir. Örneğin, uygulama bir sistem çağrısında engellenmişse , sistem çağrısı geri döner.read

Tipik bir sistemde, farelerin olaylarını okuyan bir işlem vardır: X Window sunucusu . Bu program grafiksel gösterimi ve girdi çevre birimlerini yönetir. Bireysel grafik uygulamaları daha sonra, tuşa basma, pencere odaklama değişiklikleri, pencere görünürlük değişiklikleri gibi diğer olay türlerini taşıyan genel bir X olay protokolü aracılığıyla fare olaylarına bildirilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.