जब भी USB फ्लैश ड्राइव डाली जाती है तो C ++ प्रोग्राम को कैसे निष्पादित करें


9

मेरे पास C ++ प्रोग्राम है जो USB पेन ड्राइव / फ्लैश ड्राइव तक पहुंचता है। यह वर्तमान में सम्मिलित फ्लैश ड्राइव के लिए काम करता है। एक सामान्य C ++ प्रोग्राम तब तक क्रियान्वित नहीं होता है जब तक हम उसे चलाते नहीं हैं। लेकिन मैं चाहता था कि जब भी कोई फ्लैश ड्राइव डाली जाए तो प्रोग्राम अपने आप चल जाए। मैं उसे कैसे कर सकता हूँ?

जवाबों:


7

सामान्य उपयोग के लिए, यदि आप किसी USB संग्रहण के लिए अपना प्रोग्राम चलाना चाहते हैं। नियम मैच के लिए ड्राइवर का उपयोग करें।

  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
मुझे यह दृष्टिकोण पसंद है, उत्थान, बधाई!
6:15 बजे फ्रांटिक

2
+150: शानदार जवाब: (AFAIK स्वीकार किए गए से बेहतर) यह किसी भी USB डिवाइस के लिए एक सामान्य नियम बनाता है। उपार्जित उत्तर में USB VID और PID तक ही सीमित है।
हेलियो

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उत्पादन।


मैं सहमत नहीं हूँ। C ++ प्रोग्राम एक "कमांड" है। उपयोगकर्ता उस कमांड को ट्रिगर करने के लिए एक समाधान के लिए पूछ रहा है। (उन्होंने कहा: "लेकिन मैं चाहता था कि जब भी कोई फ्लैश ड्राइव डाली जाए, तो मैं अपने आप प्रोग्राम चला
लूं

इसके लिए [ ideone.com/uOReNj ] lsusb का आउटपुट, क्या XXXXऔर के मूल्य क्या होंगे YYYY?
विनयवय्स

यदि आपका पेनड्राइव किंग्स्टन से अधिक है: XXXX = 0951, और YYYY = 162f।
फ्रांटिक

हर अलग-अलग पेन ड्राइव के लिए अपना कोड ट्रिगर करने के लिए, क्या मुझे हमेशा "my-usb-device.rules" फाइल अपडेट करनी चाहिए?
विनायमास्स

YO को हर डिवाइस के लिए नियम बनाना होगा। या डेमन के रूप में चलाने के लिए और udv ट्रिगर का निरीक्षण करने के लिए अपने सी ++ कोड को बेहतर रिफ्लेक्टर करें।
फ्रांटिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.