मान लीजिए कि मैं खुली() सिस्टम कॉल को पूरी तरह से लेना चाहता हूं, शायद वास्तविक सिस्कल को लपेटने और कुछ लॉगिंग करने के लिए। One way to do this is to use LD_PRELOAD एक (उपयोगकर्ता द्वारा निर्मित) साझा ऑब्जेक्ट लाइब्रेरी लोड करने के लिए जो खुले() प्रविष्टि बिंदु को लेता है।मैं लिनक्स पर एक सिस्कल फ़ंक्शन को कैसे कार्यान्वित (या लपेट सकता हूं)?
उपयोगकर्ता द्वारा निर्मित खुले() दिनचर्या को ग्लिब फ़ंक्शन open()
पर dlsym()
द्वारा पॉइंटर प्राप्त होता है, और इसे कॉल किया जाता है।
ऊपर प्रस्तावित समाधान एक गतिशील समाधान है, हालांकि। मान लीजिए कि मैं अपने open()
रैपर को स्थिर रूप से लिंक करना चाहता हूं। मैं यह कैसे करूंगा? मुझे लगता है कि तंत्र एक जैसा है, लेकिन मुझे लगता है कि उपयोगकर्ता द्वारा परिभाषित open()
और libc open()
के बीच एक प्रतीक संघर्ष होगा।
एक ही लक्ष्य प्राप्त करने के लिए कृपया कोई अन्य तकनीक साझा करें।
आपके कोड में केवल एक रैपर फ़ंक्शन/मैक्रो चिपकाने के बारे में कैसे? –
@ सेमस: मैं मैक्रोज़ का उपयोग नहीं करना पसंद करता हूं। मुझे वास्तव में कोई समस्या नहीं है। मैं सिर्फ एसओ ज्ञान बढ़ाने और कुछ नई चाल सीखने के लिए कह रहा हूं। –