में स्ट्रक्चर इनोड और स्ट्रक्चर फ़ाइल का उपयोग कर डेटा पास करने का कारण मैं Linux Device Drivers, 3rd edition का अध्याय 3.5 का अध्ययन कर रहा हूं। इस अनुभाग में एक कस्टम संरचना हम खुले समारोह में struct inode *inode
से खुद को परिभाषित पुनः प्राप्त करने के लिए एक विधि का परिचय:लिनक्स डिवाइस ड्राइवर प्रोग्रामिंग
int scull_open(struct inode *inode, struct file *filp)
{
struct scull_dev *dev;
dev = container_of(inode->i_cdev, struct scull_dev, cdev);
filp->private_data = dev; /* for other methods */
}
return 0;
}
मेरी समझ से, जबकि डिवाइस खोला जाता है, struct inode *inode
डिवाइस का प्रतिनिधित्व scull_open
को पारित कर दिया है। फिर, कस्टम संरचना dev
निकाला जाता है और filp->private_data
में भेजा जाता है तो इस तरह के scull_read
के रूप में है कि अन्य तरीकों के लिए इसका इस्तेमाल कर सकते हैं:
ssize_t scull_read(struct file *filp, char _ _user *buf, size_t count,
loff_t *f_pos)
{
struct scull_dev *dev = filp->private_data;
/* other codes that uses *dev */
}
यह जब तक मुझे एहसास हुआ कि हम पहले से ही scull_setup_cdev
here में प्रारंभ के दौरान एक struct scull_dev *dev
था मेरे लिए ठीक लग रहा है।
मैं नहीं बल्कि उलझन के बाद से मैंने सोचा था कि हम struct scull_dev *dev
एक वैश्विक चर कर सकते हैं, तो scull_read
और अन्य तरीकों अंततः सभी गुजर inode
और file
का उपयोग कर के माध्यम से जा के बिना यह करने के लिए उपयोग होगा हूँ।
मेरा सवाल है, हम इसे वैश्विक चर क्यों नहीं बनाते?
कोई भी डेटा पास करने के लिए इस विधि का उपयोग करने के कुछ व्यावहारिक उदाहरण प्रदान कर सकता है?
देख सकते हैं इस प्रश्न/उत्तर में क्यों वैश्विक चर बुरा कर रहे हैं और जब वहाँ कोई अन्य रास्ता नहीं है, सिवाय इसके प्रयोग नहीं करना चाहिए आप के लिए एक सबक हो। –
हाँ, लेकिन लेखक को पढ़ाने के दौरान यह बताने चाहिए कि विशेष कार्य का उपयोग क्यों और क्या है। – mrigendra