লিনাক্সে মাউস ইভেন্টগুলি কীভাবে কাজ করে?


25

এটি বেশিরভাগ কৌতূহলের বাইরে, আমি কীভাবে ইভেন্ট হ্যান্ডলিং নিম্ন স্তরের কাজ করে তা বোঝার চেষ্টা করছি, সুতরাং দয়া করে আমাকে এমন কোনও সফ্টওয়্যার সম্পর্কে উল্লেখ করবেন না যা এটি আমার জন্য করবে।

উদাহরণস্বরূপ যদি আমি সি / সি ++ তে এমন একটি প্রোগ্রাম লিখতে চাই যা মাউস ক্লিকগুলিতে প্রতিক্রিয়া দেখায় তবে আমি ধরে নিয়েছি কার্নেলের কোনও ফাংশন হুক করার জন্য আমার একটি সিস্টেম কল ব্যবহার করা প্রয়োজন, অথবা সম্ভবত আপনাকে কেবল মাউসের স্থিতি পরীক্ষা করতে হবে, আমি জানি না।

আমি ধরে নিয়েছি যেহেতু সি / সি ++ এ প্রায় সমস্ত কিছু সম্ভব, এটি এত নিচু স্তরের হয়ে থাকায় আমি বেশিরভাগ ক্ষেত্রে এটি কীভাবে কাজ করে তা সম্পর্কে আগ্রহী, যদিও আমার নিজেরাই সম্ভবত এটি প্রয়োগ করতে হবে না।

প্রশ্নটি হল এটি লিনাক্সে কীভাবে কাজ করে, সেখানে নির্দিষ্ট সিস্টেম কল, সি লাইব্রেরি ইত্যাদি রয়েছে?

উত্তর:


28

যদি আপনি লিনাক্সে মাউস ব্যবহার করে এমন একটি বাস্তব-বিশ্ব প্রোগ্রাম লিখছেন তবে আপনি সম্ভবত একটি এক্স অ্যাপ্লিকেশন লিখছেন এবং সেক্ষেত্রে আপনার মাউসের ইভেন্টগুলির জন্য এক্স সার্ভারটি জিজ্ঞাসা করা উচিত। কিউটি , জিটিকে এবং লিবিএসডিএল এমন কয়েকটি জনপ্রিয় সি লাইব্রেরি যা মাউস, কীবোর্ড, গ্রাফিক্স, টাইমার এবং জিইউআই প্রোগ্রাম লেখার জন্য প্রয়োজনীয় অন্যান্য বৈশিষ্ট্যগুলি অ্যাক্সেসের জন্য ফাংশন সরবরাহ করে। টার্মিনাল অ্যাপ্লিকেশনগুলির জন্য Ncurses একটি অনুরূপ লাইব্রেরি।

তবে আপনি যদি আপনার সিস্টেমটি অন্বেষণ করছেন, বা আপনি যে কারণেই X ব্যবহার করতে পারবেন না, এখানে কার্নেল ইন্টারফেসে এটি কীভাবে কাজ করে তা এখানে।

ইউনিক্স দর্শনের একটি মূল ধারণাটি হ'ল "সবকিছুই একটি ফাইল"। আরও সুনির্দিষ্টভাবে বলা যায় যে, ফাইলগুলির সাথে কাজ করার জন্য আপনি যে একই সিস্টেম কল ব্যবহার করছেন তার মাধ্যমে যতটা সম্ভব সম্ভব অ্যাক্সেসযোগ্য হওয়া উচিত। এবং তাই মাউসের কার্নেল ইন্টারফেসটি একটি ডিভাইস ফাইল। আপনি open()এটি, বৈকল্পিকভাবে কল করুন poll()বা select()এতে আগত ডেটা আছে কি না তা দেখার read()জন্য এবং এতে ডেটা পড়তে পারেন।

প্রাক-ইউএসবি সময়ে, নির্দিষ্ট ডিভাইস ফাইলটি প্রায়শই একটি সিরিয়াল বন্দর ছিল, যেমন /dev/ttyS0, বা পিএস / 2 পোর্ট /dev/psaux,। হার্ডওয়্যার প্রোটোকল যা মাউসে তৈরি হয়েছিল তা ব্যবহার করে আপনি মাউসের সাথে কথা বলেছেন। এই দিনগুলিতে /dev/input/*সাবসিস্টেমটিকে অগ্রাধিকার দেওয়া হয়, কারণ এটি অনেকগুলি ইনপুট ডিভাইসগুলি পরিচালনা করার জন্য একীভূত, ডিভাইস-স্বতন্ত্র উপায় সরবরাহ করে। বিশেষত, /dev/input/miceআপনার সিস্টেমে সংযুক্ত যে কোনও মাউস থেকে ইভেন্টগুলি /dev/input/mouseNআপনাকে দেবে এবং আপনাকে একটি নির্দিষ্ট মাউস থেকে ইভেন্টগুলি দেবে। বেশিরভাগ আধুনিক লিনাক্স ডিস্ট্রিবিউশনে, আপনি যখন মাউস প্লাগ করেন তখন এই ফাইলগুলি গতিশীলভাবে তৈরি হয়।

মাউস ডিভাইস ফাইলে আপনি কী পড়বেন বা লিখবেন ঠিক সে সম্পর্কে আরও তথ্যের জন্য, আপনি কার্নেল ডকুমেন্টেশনে ইনপুট / ইনপুট.সেক্সট দিয়ে শুরু করতে পারেন । বিশেষত বিভাগ 3.2.2 (মাউসদেব) এবং 3.2.4 (বিভাজন) এবং বিভাগ 4 এবং 5 এ দেখুন।


8

সাধারণত, হার্ডওয়্যার ডিভাইস থেকে প্রাপ্ত তথ্যগুলি ডিভাইস ফাইলগুলির মাধ্যমে অ্যাপ্লিকেশনগুলিতে প্রকাশিত হয় । ইঁদুরের জন্য, আধুনিক লিনাক্স সিস্টেমে, ডিভাইসটি /dev/mice(এই ডিভাইসটি সমস্ত সংযুক্ত ইঁদুর থেকে ঘটনা সংগ্রহ করে, প্রতিটি পৃথক মাউসের সাথে সম্পর্কিত ডিভাইসও রয়েছে)।

আপনি যখন মাউসটি সরান বা ক্লিক করেন, তখন মাউস কম্পিউটারে একটি বৈদ্যুতিক সংকেত প্রেরণ করে, যার কারণে এটি একটি বাধা বাড়াতে পারে । লিনাক্স কার্নেলের একটি অংশের কোডটি একটি বিঘ্নিত হ্যান্ডলার নামে পরিবর্তিতভাবে ইভেন্টের ডেটা পড়ায় (যেমন কোন বোতামটি চাপানো হয়েছিল) এবং কার্নেলের ভিতরে বিজ্ঞপ্তিগুলির একটি শৃঙ্খলা ট্রিগার করে।

এই ডিভাইসের সাথে সম্পর্কিত কোনও ডিভাইস ফাইল থেকে পড়া এমন কোনও অ্যাপ্লিকেশন যদি থাকে তবে সেই অ্যাপ্লিকেশনটিকে বলা হয় যে ইনপুট অপেক্ষা করছে। উদাহরণস্বরূপ, যদি অ্যাপ্লিকেশনটি কোনও সিস্টেমে ব্লক করা থাকে তবে সিস্টেম কলটি রিটার্ন দেয়।read

একটি সাধারণ সিস্টেমে মাউসের ইভেন্টগুলি পড়ার একটি প্রক্রিয়া রয়েছে: এক্স উইন্ডো সার্ভার । এই প্রোগ্রামটি গ্রাফিকাল ডিসপ্লে এবং ইনপুট পেরিফেরিয়াল পরিচালনা করে। জেনেরিক এক্স ইভেন্ট প্রোটোকলের মাধ্যমে পৃথক গ্রাফিকাল অ্যাপ্লিকেশনগুলিকে মাউস ইভেন্ট সম্পর্কে অবহিত করা হয়, যা কী ইভেন্টগুলি যেমন উইন্ডো ফোকাস পরিবর্তনগুলি, উইন্ডোটির দৃশ্যমান পরিবর্তন,…

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.