Linux自动判断是否插入网线的几种方法
? ? 在嵌入式產(chǎn)品上,如何讓用戶選擇有線還是無線上網(wǎng)呢?如何讓他們判斷使用了哪種方式上網(wǎng)呢?我們是這樣處理的:優(yōu)先使用網(wǎng)線上網(wǎng),穩(wěn)定。即程序自動判斷,如果查了網(wǎng)線,則使用網(wǎng)線上網(wǎng),如果沒有網(wǎng)線連接,則無線上網(wǎng)。
? ??所以,問題的重點(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ò)的信息的文件,我試了不少,覺得這個還算準(zhǔn)確,但并非100%哦,如果啟動開發(fā)板后,eth0中bytes、packets 不為0,那它一定插了網(wǎng)線,但此種方法只適合開機(jī)啟動時(shí)判斷,之后的話,就很麻煩了。???
? ??獲取/proc/net/dev的信息,需要借助getline()函數(shù)和sscanf()函數(shù)??涉溄?#xff1a;getline()函數(shù)
?
方法二:
???當(dāng)插網(wǎng)線時(shí),會打印PHY: 0:01 - Link is Up - 100/Full,拔出網(wǎng)線時(shí),打印PHY: 0:01 - Link is Down,這些都由底層驅(qū)動觸發(fā),即網(wǎng)線插或拔,驅(qū)動都由處理,所以,我們可以在底層發(fā)出一個信號,上層接收。使用這種方法,個人認(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。個人不太同意這種方法,如果在腳本(/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方法,我測試了一下,不準(zhǔn)確。
?
方法四:
???1)udhcpc自動獲取eth0的ip地址,可以限制次數(shù)。
???2)ioctl獲取eth0的ip地址,如果獲取ip地址成功,則插入了網(wǎng)線,如果失敗,則未插入網(wǎng)線。
? ??我就是使用這種方法處理是否插入網(wǎng)線的,屢試不爽,最值得推薦的(僅限開機(jī)啟動時(shí)哦,因?yàn)槲揖褪怯糜诖藭r(shí))。
?
???可能有更多更好的自動判斷是否插入網(wǎng)線的方法,由于本人知識和能力的限度,也就只能完成至此了,所以,如果大家有什么更好的辦法來自動判斷,歡迎來擾!!!
總結(jié)
以上是生活随笔為你收集整理的Linux自动判断是否插入网线的几种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【IEEE】IEEE论文从投稿到发表全流
- 下一篇: 查询linux系统中文件名颜色分别代表什