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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/8 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux自动判断是否插入网线的几种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 在嵌入式產品上,如何讓用戶選擇有線還是無線上網呢?如何讓他們判斷使用了哪種方式上網呢?我們是這樣處理的:優先使用網線上網,穩定。即程序自動判斷,如果查了網線,則使用網線上網,如果沒有網線連接,則無線上網。

? ??所以,問題的重點是如何判斷用戶是否插了網線!下面介紹四種方法,僅供參考。

方法一

/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???

? ??在開發板上/proc/net目錄下,還有很多關于網絡的信息的文件,我試了不少,覺得這個還算準確,但并非100%哦,如果啟動開發板后,eth0中bytes、packets 不為0,那它一定插了網線,但此種方法只適合開機啟動時判斷,之后的話,就很麻煩了。???

? ??獲取/proc/net/dev的信息,需要借助getline()函數和sscanf()函數。可鏈接:getline()函數

?

方法二

???當插網線時,會打印PHY: 0:01 - Link is Up - 100/Full,拔出網線時,打印PHY: 0:01 - Link is Down,這些都由底層驅動觸發,即網線插或拔,驅動都由處理,所以,我們可以在底層發出一個信號,上層接收。使用這種方法,個人認為最為準確,而且最有效

?

方法三:

插網線:

/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

拔網線:

/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

???區別在于紅字的RUNNING。個人不太同意這種方法如果在腳本(/etc/profile)運行,永遠沒有RUNNING,而拔掉網線時,時常打印PHY: 0:01 - Link is Up - 100/Full,PHY: 0:01 - Link is Down,而在PHY: 0:01 - Link is Up - 100/Full狀態時,ifconfig eth0是RUNNING狀態的。

? ??網上也有ethtoolseth0方法,我測試了一下,不準確。

?

方法四

???1)udhcpc自動獲取eth0的ip地址,可以限制次數。

???2)ioctl獲取eth0的ip地址,如果獲取ip地址成功,則插入了網線,如果失敗,則未插入網線。

? ??我就是使用這種方法處理是否插入網線的,屢試不爽,最值得推薦的(僅限開機啟動時哦,因為我就是用于此時

?

???可能有更多更好的自動判斷是否插入網線的方法,由于本人知識和能力的限度,也就只能完成至此了,所以,如果大家有什么更好的辦法來自動判斷,歡迎來擾!!!

總結

以上是生活随笔為你收集整理的Linux自动判断是否插入网线的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。