के साथ संरचना मैंने कुछ प्रकार के चरित्र डिवाइस को लागू किया है और मुझे copy_ from_user फ़ंक्शन के साथ सहायता चाहिए।लिनक्स कर्नेल: copy_from_user - पॉइंटर्स
मैं एक संरचना है:
struct my_struct{
int a;
int *b;
};
मैं उपयोगकर्ता अंतरिक्ष में यह प्रारंभ और 'लिखने' समारोह का उपयोग कर मेरे चार डिवाइस के लिए my_struct सूचक गुजरती हैं। कर्नेल के स्पेस कैरेक्टर डिवाइस 'लिखें' फ़ंक्शन में मैंने इसे * char से इस तरह की संरचना में डाला। मैं kmalloc का उपयोग कर एक संरचना के लिए कुछ स्मृति आवंटित करता हूं और इसमें copy_from_user
करता हूं।
यह सरल 'int ए' के लिए ठीक है, लेकिन यह बी मान के केवल सूचक (पता) की प्रतिलिपि बनाता है, बी द्वारा इंगित मूल्य नहीं, इसलिए अब मैं कर्नेल स्पेस में हूं और मैं एक पॉइंटर के साथ काम कर रहा हूं जो इंगित करता है एक उपयोगकर्ता अंतरिक्ष स्मृति। क्या यह गलत है और मुझे सीधे उपयोगकर्ता स्पेस पॉइंटर तक नहीं पहुंचना चाहिए और मुझे अपनी संरचना में प्रत्येक पॉइंटर copy_from_user
करना है और फिर copy_to_user
फ़ंक्शन का उपयोग करके "पॉइंट" फ़ंक्शन में प्रत्येक पॉइंटर को कॉपी करना होगा?
मैं यह भी इंगित करता हूं कि मैं किसी भी सिस्कोल या इओक्ट्स के बारे में नहीं सोच सकता जो उनके अंदर पॉइंटर्स के साथ structs लेते हैं। यहां तक कि जिनके पास तार हैं, उनके पास संरचना में वर्णों की एक सरणी होगी। तथ्य यह है कि प्रत्येक सूचक सदस्य के लिए ऐसा करने के लिए कोड लिखना बेहद परेशान है, उसके साथ कुछ करने के लिए कुछ हो सकता है। :-) – asveikau
@asveikau: 'readv()' और 'writev()'? – caf