嵌入式自动判断是否插入网线的几种方法
????所以,問題的重點(diǎn)是如何判斷用戶是否插了網(wǎng)線!下面介紹四種方法,僅供參考。
方法一:
/mnt/wifi$?cat /proc/net/dev
Inter-|???Receive????????????????????????????????????????????????|?Transmit
?face |bytes???packets errs drop fifo frame compressed multicast|bytes????packets errs drop fifo colls carriercompressed
????lo:??????0???????0????0???0????0?????0?????????0?????????0????????0??????0????0????0???0?????0???????0?????????0
??eth0:????3439?????15???0???0????0?????0?????????0?????????0????????0??????0????0????0???0?????0???????0??????????0???
????在開發(fā)板上/proc/net目錄下,還有很多關(guān)于網(wǎng)絡(luò)的信息的文件,我試了不少,覺得這個(gè)還算準(zhǔn)確,但并非100%哦,如果啟動(dòng)開發(fā)板后,eth0 中bytes、packets 不為0,那它一定插了網(wǎng)線,但此種方法只適合開機(jī)啟動(dòng)時(shí)判斷,之后的話,就很麻煩了。???
????獲取/proc/net/dev的信息,需要借助getline()函數(shù)和sscanf()函數(shù)。可鏈接:getline()函數(shù)
?
方法二:
???當(dāng)插網(wǎng)線時(shí),會(huì)打印PHY: 0:01 - Link is Up - 100/Full,拔出網(wǎng)線時(shí),打印PHY: 0:01 - Link is Down,這些都由底層驅(qū)動(dòng)觸發(fā),即網(wǎng)線插或拔,驅(qū)動(dòng)都由處理,所以,我們可以在底層發(fā)出一個(gè)信號(hào),上層接收。使用這種方法,個(gè)人認(rèn)為最為準(zhǔn)確,而且最有效。
?
方法三:
插網(wǎng)線:
/mnt/wifi$?ifconfig eth0
eth0??????Link encap:Ethernet??HWaddr 06:ED:B5:C3:AA:23
??????????UP BROADCAST?RUNNING?MULTICAST??MTU:1500?Metric:1
??????????RX packets:159 errors:0 dropped:0overruns:0 frame:0
??????????TX packets:0 errors:0 dropped:0overruns:0 carrier:0
??????????collisions:0 txqueuelen:1000
??????????RX bytes:23822 (23.2 KiB)??TX bytes:0 (0.0 B)
??????????Interrupt:14
拔網(wǎng)線:
/mnt/wifi$?ifconfig eth0
eth0??????Link encap:Ethernet??HWaddr 06:ED:B5:C3:AA:23
??????????UP BROADCAST MULTICAST??MTU:1500?Metric:1
??????????RX packets:160 errors:0 dropped:0overruns:0 frame:0
??????????TX packets:0 errors:0 dropped:0overruns:0 carrier:0
??????????collisions:0 txqueuelen:1000
??????????RX bytes:24055 (23.4 KiB)??TX bytes:0 (0.0 B)
??????????Interrupt:14
???區(qū)別在于紅字的RUNNING。個(gè)人不太同意這種方法,如果在腳本(/etc/profile)運(yùn)行,永遠(yuǎn)沒有RUNNING,而拔掉網(wǎng)線時(shí),時(shí)常打印PHY: 0:01 - Link is Up - 100/Full,PHY: 0:01 - Link is Down,而在PHY: 0:01 - Link is Up - 100/Full狀態(tài)時(shí),ifconfig eth0是RUNNING狀態(tài)的。
????網(wǎng)上也有ethtoolseth0方法,我測(cè)試了一下,不準(zhǔn)確。
?
方法四:
???1)udhcpc自動(dòng)獲取eth0的ip地址,可以限制次數(shù)。
???2)ioctl獲取eth0的ip地址,如果獲取ip地址成功,則插入了網(wǎng)線,如果失敗,則未插入網(wǎng)線。
????我就是使用這種方法處理是否插入網(wǎng)線的,屢試不爽,最值得推薦的(僅限開機(jī)啟動(dòng)時(shí)哦,因?yàn)槲揖褪怯糜诖藭r(shí))。
總結(jié)
以上是生活随笔為你收集整理的嵌入式自动判断是否插入网线的几种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 积分竟然比微分早了1300年!一文讲清积
- 下一篇: 安装夜深模拟器无法打开或进度条一直卡住解