2014-11-09 8 views
8

में एक प्रतीकात्मक लिंक पढ़ना मैं एक एलकेएम लिख रहा हूं और यह पता लगाने की आवश्यकता है कि एक विशिष्ट सिम्लिंक कहां इंगित कर रहा है। असल में मुझे syscall readlinkat (या readlink) की कार्यक्षमता की आवश्यकता है लेकिन कर्नेल-स्पेस में। क्या इसे करने का कोई आसान तरीका है?कर्नेल-स्पेस

readlinkat का उपयोग सीधे मेरे लिए काम नहीं कर रहा है, मुझे हमेशा EFAULT मिल रहा है (मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरा बफर स्पष्ट रूप से कर्नेल मेमोरी स्पेस में है और उपयोगकर्ता-स्थान में नहीं है)।

+1

संभावित डुप्लिकेट [कर्नेल से उपयोगकर्ता-स्थान स्मृति आवंटित करें] (http://stackoverflow.com/questions/7629141/allocate-user-space-memory-from- कर्नेल) – Hasturkun

+1

संभावित रूप से डुप्लिकेट नहीं है, लेकिन प्रासंगिक हो सकता है । – Hasturkun

उत्तर

4

सबसे पहले, आप सीधे अपने कर्नेल मॉड्यूल में उपयोगकर्ता स्पेस सिस्टम कॉल (readlinkat() या readlink()) का उपयोग नहीं कर सकते हैं। इसके बजाय आपको कर्नेल स्पेस के भीतर निर्यात किए गए फ़ंक्शन/प्रतीक का उपयोग करने की आवश्यकता है।

अगला, आप जिस फ़ाइल सिस्टम का उपयोग कर रहे हैं उसके लिए struct inode_operations विशिष्ट में देखना चाह सकते हैं। generic_readlink() पर भी देखें जो आंतरिक रूप से vfs_readlink() पर कॉल करता है।