日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式自动判断是否插入网线的几种方法

發(fā)布時(shí)間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式自动判断是否插入网线的几种方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?在嵌入式產(chǎn)品上,如何讓用戶選擇有線還是無線上網(wǎng)呢?如何讓他們判斷使用了哪種方式上網(wǎng)呢?我們是這樣處理的:優(yōu)先使用網(wǎng)線上網(wǎng),穩(wěn)定。即程序自動(dòng)判斷,如果查了網(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ò)的信息的文件,我試了不少,覺得這個(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。