আমি এম্বেড থাকা এআরএম টার্গেটে এই মুহুর্তে ড্রাইভার বিকাশ করছি বলে লিনাক্স ২.6.২7.৮ হ্যান্ডি আমার কাছে সোর্স রয়েছে।
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()
যা প্রোফস হ্যান্ডলিং ফাংশনগুলির একটি শ্রেণিবিন্যাসের অংশ । read()
অনুরোধটি /proc/net/tcp
ফাইল তৈরি না করা পর্যন্ত পাঠ্যটি তৈরি করা হয় না , কারণ একটি প্রচলিত পদ্ধতি যা প্রেফস পড়েছে তথ্য আপডেট করার চেয়ে অবশ্যই খুব কম সাধারণ।
কিছু ড্রাইভার (যেমন আমার) একক দিয়ে প্রোক_আড ফাংশন প্রয়োগ করে sprintf()
। মূল ড্রাইভার বাস্তবায়নে অতিরিক্ত জটিলতা হ'ল সম্ভাব্য খুব দীর্ঘ আউটপুট পরিচালনা করা যা একটি একক পড়ার সময় অন্তর্বর্তী, কার্নেল-স্পেস বাফারে ফিট নাও হতে পারে।
আমি এটি একটি 64 কে রিড বাফার ব্যবহার করে একটি প্রোগ্রাম দিয়ে পরীক্ষা করেছি তবে এটি ফলাফলের জন্য ডেটা ফেরত দেওয়ার জন্য আমার সিস্টেমে 3072 বাইটের কার্নেল স্পেস বাফার তৈরি করে। অগ্রণী পয়েন্টার সহ একাধিক কলগুলির চেয়ে বেশি পাঠ্য ফিরে আসার প্রয়োজন হয় to আমি যখন জানি না যে যখন একাধিক আই / ও-র প্রয়োজন হয় তখন ফিরে আসা ডেটাগুলিকে সামঞ্জস্য করার সঠিক উপায় কী। অবশ্যই প্রতিটি এন্ট্রি /proc/net/tcp
স্ব-সামঞ্জস্যপূর্ণ। কিছুটা সম্ভাবনা রয়েছে যে পাশাপাশি পাশাপাশি লাইনগুলি বিভিন্ন সময়ে স্ন্যাপশট হয়।