यह एक अजीब सवाल की तरह लग सकता है, लेकिन जब मैं जाने के लिए और एक फ़ाइल खोलने:फ़ाइल डिस्क्रिप्टर में वास्तव में कितनी जानकारी संग्रहीत की जाती है?
int fd;
fd = open("/dev/somedevice", O_RDWR);
वास्तव में क्या मैं वापस मिल रहा है? मैं मैन पेज देख सकता हूं:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process
लेकिन क्या यह है? क्या यह सिर्फ int
है या दृश्यों के पीछे इसके साथ डेटा संलग्न है? कारण मैं पूछ रहा हूँ मैं कुछ कोड (लिनक्स/सी) जहां हम उपयोगकर्ता अंतरिक्ष से फ़ाइल खोल रहे हैं पाया है: कर्नेल अंत पर
//User space code:
int fdC;
if ((fdC = open(DEVICE, O_RDWR)) < 0) {
printf("Error opening device %s (%s)\n", DEVICE, strerror(errno));
goto error_exit;
}
while (!fQuit) {
if ((nRet = read(fdC, &rx_message, 1)) > 0) {
तो, इस मॉड्यूल के लिए फ़ाइल आपरेशन (जो की आपूर्ति एफडी) मानचित्र n_read()
कार्य करने के लिए लिखा है:
struct file_operations can_fops = {
owner: THIS_MODULE,
lseek: NULL,
read: n_read,
फिर फ़ाइल वर्णनकर्ता n_read()
में प्रयोग किया जाता है, लेकिन यह डेटा प्राप्त करने पहुँचा जा रहा है: तो
int n_read(struct file *file, char *buffer, size_t count, loff_t *loff)
{
data_t * dev;
dev = (data_t*)file->private_data;
... मैं फाई आंकड़ा यहाँ क्या हो रहा है या तो:
ए) एक फ़ाइल वर्णनकर्ता open()
से लौटे सिर्फ एक वर्णनात्मक पूर्णांक मान की तुलना में अधिक डेटा होता है
या
बी) एक कॉल करने के लिए उपयोगकर्ता अंतरिक्ष 'isn में "पढ़ें" के बीच मानचित्रण जैसा कि मैं इसे बाहर कर रहा हूं उतना सरल हूं और इस समीकरण में कुछ कोड गायब है।
कोई भी इनपुट जो मुझे निर्देशित करने में मदद कर सकता है?
'fQuit' कहां घोषित किया गया है? और हाँ फ़ाइल वर्णनकर्ता सिर्फ पूर्णांक हैं। उनके बारे में कोई भी जानकारी कर्नेल फ़ाइल डिस्क्रिप्टर तालिका से सिस्टम कॉल के साथ प्राप्त की जानी चाहिए। –
@ user1700513 - आप मान सकते हैं कि 'fQuite' 0 – Mike