যখনই কোনও ইউএসবি ফ্ল্যাশ ড্রাইভ wheneverোকানো হয় তখন কীভাবে সি ++ প্রোগ্রাম চালানো যায়


9

আমার কাছে একটি সি ++ প্রোগ্রাম রয়েছে যা ইউএসবি পেন ড্রাইভ / ফ্ল্যাশ ড্রাইভগুলি অ্যাক্সেস করে। এটি বর্তমানে flashোকানো ফ্ল্যাশ ড্রাইভের জন্য কাজ করে। একটি সাধারণ সি ++ প্রোগ্রাম কার্যকর না হওয়া পর্যন্ত এটি চালায় না run তবে আমি চেয়েছিলাম যখনই কোনও ফ্ল্যাশ ড্রাইভ sertedোকানো হয় তখন প্রোগ্রামটি স্বয়ংক্রিয়ভাবে চালিত হয়। আমি এটা কিভাবে করবো?

উত্তর:


7

সাধারণ ব্যবহারের জন্য, আপনি যদি কোনও ইউএসবি স্টোরেজের জন্য আপনার প্রোগ্রামটি চালাতে চান। নিয়ম ম্যাচের জন্য ড্রাইভারটি ব্যবহার করুন।

  1. একটি udevবিধি ফাইল যুক্ত করুন

    sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. এই বিধি যুক্ত করুন

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
    

    আপনি যদি নিজের প্রোগ্রামটি ডিস্কগুলিকে আলাদা করতে চান তবে এটি বিভিন্ন ক্রিয়াকলাপ চালায়, ব্যবহার করুন (আপনি এর ক্রমিক নম্বর বা আপনার পছন্দ মতো কোনও বৈশিষ্ট্য পাস করতে পারেন):

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
    
  3. সমস্ত বিধি পুনরায় লোড করুন

    sudo udevadm control --reload-rules
    
  4. ফ্ল্যাশ ড্রাইভটি আনপ্লাগ এবং পুনরায় প্লাগ করুন

মন্তব্য:

  • আমি নিয়মটি পরীক্ষার জন্য কোন লগ তৈরি করে তা পরীক্ষা করতে কেবল এই নিয়মটি ব্যবহার করেছি:

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo $env{ID_VENDOR_ID} $env{ID_MODEL_ID} >> /home/username/Desktop/usb-storage.log'"
    
  • #লাইনের শুরুতে যোগ করে আপনি যে নিয়মগুলি চান না তা মন্তব্য করতে পারেন । বিধি ফাইলটিতে একাধিক বিধি থাকতে পারে।

  • সমস্ত উপলব্ধ envভেরিয়েবল পরীক্ষা করতে , ব্যবহার করুন:

    ACTION=="add", DRIVERS=="usb-storage", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage-env.log; env >> /home/username/Desktop/usb-storage-env.log'"
    
  • নিয়ম ম্যাচের জন্য প্যারামিটারগুলি ব্যবহার করার জন্য পরীক্ষা করতে, চালান:

    sudo udevadm info --name=/dev/sdb1 --attribute-walk
    

তথ্যসূত্র:


2
আমি এই পদ্ধতির পছন্দ, upvoting, অভিনন্দন!
ফ্রান্টিক 20'15

2
+150: দুর্দান্ত উত্তর: (এএফআইকে গ্রহণযোগ্যতার চেয়ে ভাল) এটি যে কোনও ইউএসবি ডিভাইসের জন্য একটি সাধারণ নিয়ম করে। স্বীকৃত উত্তরে ইউএসবি একটি ভিআইডি এবং একটি পিআইডি সীমাবদ্ধ।
হেলিও

5

আপনি udevএকটি স্বতন্ত্র কমান্ড চালাতে ব্যবহার করতে পারেন । এটি কার্যকর করতে, এখানে একটি নিয়ম তৈরি করুন /etc/udev/rules.d/:

sudo nano /etc/udev/rules.d/my-usb-device.rules

এবং প্রবেশ করুন:

ACTION=="add", ATTRS{idProduct}=="XXXX", ATTRS{idVendor}=="YYYY", RUN+="/location/of/my/command"

উল্লেখ্য: দ্য XXXXএবং YYYYমান থেকে নিয়ে যাওয়া হবে lsusbআউটপুট।


আমি রাজি নই। সি ++ প্রোগ্রাম সর্বোপরি একটি "কমান্ড"। ব্যবহারকারী এই আদেশটি ট্রিগার করার জন্য একটি সমাধান চাইছে। (তিনি বলেছিলেন: "তবে আমি যখনই ফ্ল্যাশ ড্রাইভ
wheneverোকানো

এই [জন্য ideone.com/uOReNj lsusb এর] আউটপুট, কি মান হতে হবে XXXXএবং YYYY?
বিনাওস্মে

আপনার পেনড্রাইভ যদি কিংস্টন এর চেয়ে বেশি হয়: XXXX = 0951 এবং YYYY = 162f।
ফ্রেঞ্চিক

প্রত্যেকটি ভিন্ন পেন ড্রাইভের জন্য আমার কোডটি ট্রিগার করার জন্য, আমি কি সর্বদা "আমার-ইউএসবি-ডিভাইস.রুলস" ফাইলটি আপডেট করব?
বিনাওস্মে

আপনার প্রতিটি ডিভাইসের জন্য নিয়ম তৈরি করতে হবে। অথবা ডেমন হিসাবে চালানোর জন্য আপনার সি ++ কোডটি আরও ভাল রিফ্যাক্টর এবং udev ট্রিগারগুলি পর্যবেক্ষণ করুন।
ফ্রেঞ্চিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.