मेरे पास लिनक्स 2.6.27.8 के लिए स्रोत है क्योंकि मैं एक एम्बेडेड एआरएम लक्ष्य पर फिलहाल ड्राइवर विकास कर रहा हूं।
फ़ाइल ... linux-2.6.27.8-lpc32xx/net/ipv4/raw.c
लाइन 934 में, उदाहरण के लिए शामिल है
seq_printf(seq, "%4d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
i, src, srcp, dest, destp, sp->sk_state,
atomic_read(&sp->sk_wmem_alloc),
atomic_read(&sp->sk_rmem_alloc),
0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
atomic_read(&sp->sk_refcnt), sp, atomic_read(&sp->sk_drops));
जो आउटपुट देता है
[wally@zenetfedora ~]$ cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 017AA8C0:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 15160 1 f552de00 299
1: 00000000:C775 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 13237 1 f552ca00 299
...
समारोह में raw_sock_seq_show()
जो के एक पदानुक्रम का हिस्सा है procfs कार्यों से निपटने के। जब तक एक पाठ जेनरेट नहीं किया जाता read()
अनुरोध से बना है /proc/net/tcp
फ़ाइल, के बाद से एक उचित तंत्र procfs पढ़ता है निश्चित रूप से बहुत कम जानकारी को अद्यतन करने की तुलना में आम हैं।
कुछ ड्राइवर (जैसे मेरा) एक के साथ proc_read फ़ंक्शन को लागू करते हैं sprintf()
। कोर ड्राइवरों के कार्यान्वयन में अतिरिक्त जटिलता संभावित रूप से बहुत लंबे आउटपुट को संभालना है जो एक ही पढ़ने के दौरान मध्यवर्ती, कर्नेल-स्पेस बफर में फिट नहीं हो सकता है।
मैंने परीक्षण किया कि 64K रीड बफ़र का उपयोग करने वाले प्रोग्राम के साथ लेकिन यह डेटा वापस करने के लिए proc_read के लिए मेरे सिस्टम में 3072 बाइट्स के कर्नेल स्पेस बफर में परिणाम करता है। एडवांसिंग पॉइंटर्स वाली मल्टीपल कॉल्स की जरूरत होती है ताकि ज्यादा से ज्यादा टेक्स्ट वापस आए। मुझे नहीं पता कि एक से अधिक i / o की आवश्यकता होने पर लौटाए गए डेटा को सुसंगत बनाने का सही तरीका क्या है। निश्चित रूप से प्रत्येक प्रविष्टि /proc/net/tcp
आत्मनिर्भर है। कुछ संभावनाएं हैं कि अलग-अलग समय पर लाइनें साइड-बाय-साइड स्नैपशॉट हैं।