2013-02-19 11 views
11

मैं लिनक्स के साथ काम कर रहा हूं और मेरे पास एक निर्देशिका है जिसमें उप-निर्देशिकाएं हैं और उप-निर्देशिकाओं के अंदर फ़ाइलें हैं। मुझे फ़ाइल में बदलावों की निगरानी करनी है। सी ++ में मैं बूस्ट का उपयोग कर रहा हूं। मैं हर 30 सेकेंड में सभी निर्देशिकाओं के माध्यम से जाता हूं और last_write_time की जांच करता हूं। मुख्य रूप से, यह काम करता है। लेकिन हर बार जब यह क्रिया निष्पादित की जाती है, तो मेरा सीपीयू पागल हो जाता है और मुझे इस कार्यक्रम के लिए शीर्ष पर 15% -25% CPU उपयोग दिखाई देता है। मैंने inotify के बारे में पढ़ा है। यदि मैं इनोटिफ़ाई का उपयोग करता हूं तो मेरे पास कम या ज्यादा CPU उपयोग होगा या यह बेहतर होगा? क्या मैं क्या कर रहा हूं इसके लिए कोई अच्छा विकल्प है?निगरानी फ़ाइल में परिवर्तन C++ linux

+6

प्रदर्शन में काफी सुधार होगा, क्योंकि आपको सभी फ़ाइलों और उप-निर्देशिकाओं से गुजरना पड़ेगा। इसके बजाय आपको एक फ़ाइल या निर्देशिका बदलने पर एक अधिसूचना मिलेगी। लिनक्स पर जाने का शायद सबसे अच्छा तरीका है। –

+0

इनपुट Joachim के लिए धन्यवाद। मैं कोशिश कर रहा हूँ। – user1566277

उत्तर

13

जब आप इनोटिफ़ाई का उपयोग करते हैं, तो आपको सभी फ़ाइलों के लिए मतदान करने की आवश्यकता नहीं है ताकि यह जांच सके कि क्या परिवर्तन हैं या नहीं। आपको एक कॉलबैक सिस्टम मिलता है जो आपको सूचित करता है जब एक देखी गई फ़ाइल या निर्देशिका बदल जाती है।

कर्नेल/फाइल सिस्टम में पहले से ही यह जानकारी है, इसलिए संसाधन/सीपीयू उपयोग सिर्फ दूसरे एप्लिकेशन में नहीं ले जाया गया है, यह वास्तव में कम हो गया है।

Monitor file system activity with inotify इनोटिफ़ाई का उपयोग करने के लिए अधिक जानकारी प्रदान करता है, इसका मूल उपयोग दिखाता है और इसे सेट करने में आपकी सहायता करता है।

+0

आपके उत्तर के लिए बहुत धन्यवाद। मैं इसे आज़मा दूंगा। – user1566277