2009-07-03 8 views
5

मैं वर्तमान में log4j आउटपुट से एक एक्सएमएल फ़ाइल देख रहा हूं। मेरे पास एक कस्टम व्यूअर है जो GUI में लॉग-आउटपुट प्रदर्शित करता है। मुझे इस फ़ाइल को अपडेट होने की आवश्यकता है ताकि जीयूआई फिर से पार्स और अपडेट हो सके। सी # में विंडोज़ नो-प्रोब पर एक फाइलवॉचर अवधारणा है, लेकिन लिनक्स पर सी का उपयोग करने के मेरे पास कौन से विकल्प हैं।लिनक्स: मैं कैसे पता लगा सकता हूं कि किसी फ़ाइल को किसी अन्य प्रक्रिया द्वारा अपडेट किया गया है या नहीं?

क्या यूनिक्स और लिनक्स स्वाद (POSIX शायद) दोनों पर ऐसा करने का एक मानक तरीका है?

धन्यवाद

उत्तर

6

जॉन ने यूनिक्स/लिनक्स सिस्टम: अधिसूचना और मतदान के तहत फ़ाइलों को देखने के लिए आप ले सकते हैं दो मुख्य मार्गों का उल्लेख किया।

अधिसूचना तब होता है जब सिस्टम स्वयं (आमतौर पर कर्नेल) फ़ाइल को एक्सेस या लिखे जाने पर पंजीकृत अनुप्रयोगों को एक संदेश ट्रिगर करता है। इस दृष्टिकोण के लिए एक अनुपालन प्रणाली की आवश्यकता है और पुरानी मशीनों पर उपलब्ध नहीं हो सकता है।

लिनक्स के तहत अधिसूचना का प्राथमिक कार्यान्वयन inotify है, जो कर्नेल 2.6.13 में और बाद में बनाया गया है और इसे 2.6.12 और इससे पहले में जोड़ा जा सकता है। इनोटिफ़ाई का उपयोग करने के लिए इनोटिफ़ाई के साथ-साथ मूल set of tools and C library का उपयोग करने पर nice IBM guide है। इसके आकार, अंतिम संशोधन समय, मालिक, आदि - - बदल दिया गया है

मतदान जब अपने कार्यक्रम को बार-बार अंतराल पर एक फ़ाइल की जाँच करता है, तो उस फ़ाइल के बारे में कुछ भी नहीं देख रहा है।

इसका कोई मानक कार्यान्वयन नहीं है, क्योंकि यह प्रणाली-स्तर के आधार पर प्रोग्राम-स्तर पर लिखा गया है, हालांकि सिस्टम poll मौजूद है और इस उद्देश्य के लिए कुछ उपयोगी लगता है (मैन पेज का कहना है कि यह select जैसा है , और यह एक फ़ाइल वर्णनकर्ता पर उपलब्ध होने के लिए एक घटना की प्रतीक्षा करता है)। आप stat के साथ और अधिक बुनियादी दृष्टिकोण भी ले सकते हैं और अपनी जांच कर सकते हैं।

+0

स्पष्टीकरण –

+0

के लिए धन्यवाद मुझे संदेह है कि मतदान() मदद करेगा। ऐसा लगता है कि आपने गलत समझा है कि कौन सा मतदान() करता है। जब तक आप इसे * इनोटिफ़ाई * के साथ उपयोग नहीं करना चाहते हैं। – Thomas

+0

स्पष्टीकरण के लिए: मतदान() केवल आपको इस फाइल से "अगर मैंने पढ़ा है) जैसे सामान बता सकता है, तो क्या वह ब्लॉक होगा?" या "अधिकतम 3 सेकंड तक प्रतीक्षा करें या जब तक कि मैं इन फाइल डिस्क्रिप्टरों में से कम से कम एक से पढ़ नहीं सकता (बिना पढ़ा() अवरुद्ध)। – Thomas

6

आप inotify की तरह कुछ के लिए देख रहे हैं?

वैकल्पिक रूप से आप stat का उपयोग कर फ़ाइल को मतदान कर सकते हैं।

+0

जो मेरी आवश्यकताओं को पूरी तरह से पूरा करता है, लेकिन मुझे लगता है कि मुझे मानक सी एपीआई का उपयोग करके व्हील और कोड को फिर से आविष्कार करना होगा। तो क्या कोई मौका है कि मैं इसे सरल fstat और stat APIs का उपयोग कर कर सकता हूं? –

+0

आप यह स्पष्ट करना चाहते हैं कि ... यदि आपको आवश्यक चीज़ों की तरह लगता है, और आप लिनक्स पर हैं, तो आप इसका उपयोग क्यों नहीं कर सकते? – unwind

0

यदि आप इनोटिफ़ाई की तुलना में कुछ और पोर्टेबल चाहते हैं, जो कि लिनक्स-आईएसएम है, तो File Alteration Monitor देखें, जो पुरानी और अधिक पोर्टेबल तकनीक है, लेकिन कम प्रदर्शनकारी हो सकता है। दूसरी तरफ, यह एनएफएस-माउंटेड फाइल सिस्टम के साथ कुछ उपयोगी है, जो आपके आवेदन के आधार पर महत्वपूर्ण हो सकता है।

+0

सुझाव के लिए धन्यवाद, विशेष रूप से यह कर्नेल अज्ञेयवादी है और शायद एनएफएस घुड़सवार सिस्टम के साथ काम करता है। –

संबंधित मुद्दे

 संबंधित मुद्दे