क्या इसे बनाने का कोई तरीका है ताकि जब प्रोग्राम seek()
एक नामित पाइप पर संचालन करने का प्रयास करें तो यह वापस आ जाए ('एलीग्ल सीक' के बजाय यह काम करेगा जैसे कि पाइप एक खाली फ़ाइल थी)?
मैं अपने सिस्टम पर SQLite डेटाबेस में संग्रहीत लॉगिंग के हर अंतिम थोड़ा सा है, मेरे पास कहीं भी फाइलें नहीं हैं। हालाँकि कुछ कार्यक्रम ऐसे हैं जिनसे परेशानी होती है। 2 विशिष्ट मामले हैं;
- एक प्रोग्राम एक लॉग फ़ाइल को लिखना चाहता है जो syslog-ng ने एक नामित पाइप के रूप में बनाया है और से पढ़ रहा है। कार्यक्रम
seek()
किसी कारण से प्रदर्शन करना चाहता है और फिर विफल हो जाता है। - एक प्रोग्राम (जैसे कि denyhosts या fail2ban) एक लॉग फ़ाइल से पढ़ना चाहता है, जिसे syslog-ng ने एक नामांकित पाइप के रूप में बनाया है और वह लिख रहा है। कार्यक्रम उस
seek()
पर प्रदर्शन करना चाहता है और विफल रहता है।
आदर्श रूप में मैं सिर्फ ये चाहता हूं कि जैसे कि नामित पाइप सिर्फ एक खाली फाइल थी। मुझे कोई कारण नहीं दिख रहा है कि लॉग लिखने वाले प्रोग्राम को किसी भी तरह की तलाश करने की आवश्यकता होगी, इसे सिर्फ ऐपेंड के लिए फाइल खोलना चाहिए और लिखना शुरू करना चाहिए। मैं देख सकता हूं कि एक प्रोग्राम रीडिंग क्यों लेना चाहता है, ताकि वह अपने अंतिम स्थान से फिर से शुरू कर सके, और इसलिए मैं इसे व्यवहार करना चाहूंगा जैसे कि फ़ाइल खाली थी (जैसे कि इसे काट दिया गया था)।
तो क्या कुछ विकल्प है जो नामित पाइपों पर सेट किया जा सकता है ताकि उन्हें इस तरह से व्यवहार किया जा सके? यदि कोई ऐसा मोड नहीं है जिसे सेट किया जा सकता है जब syslog- एनजी पाइप को खोलता है तो क्या यह इस तरह से व्यवहार करता है (मैं कोड परिवर्तन करने के लिए खुला हूं)? या मैं एक नाला हूँ?