因为最近有需求判断网线是否插在网口,所以特意收集一些资料在这里整理一下,为以后查阅方便在这里做个笔记,如果有相同寻求也可以做个参考(树莓派测试环境):
最初想法是ping网络是否畅通,但是实际需求中可能会出现树莓派同过网线直接连载PC机上在没有网的情况工作,此时网线是插好的,但是网络不通,所以就没办法通过ping网络检测网线是否插好,纠结了一下,就在网上收集shell脚本和C语言两个方向资料
shell脚本方向:
Linux中有ethtool命令可以查看网卡状态
树莓派中默认没有安装这个工具
sudo apt-get install ethtool
下面是执行结果:
1 ethtool eth0
如果插好网线如下图:
根据红色部分判断
如果没插网线如下图:
mii-tool 也是可也查看网线是否插好的一个命令工具
该工具在树莓派上默认安装
执行需要权限 sudo mii-tool
除此之外mii-tool还有很多用法 具体使用方法可以用mii-tool -h来获得在这里就不介绍了
- 查看网卡的工作模式,输入命令:
如果插好网线如下图:
根据红色部分判断
如果没插网线如下图:
上述命令很简单 很容易配合shell 脚本 来判断网线状态,当然也可以配合C语言进行判断,根据实际项目需求来选择,哪个方便就用那个
这里简述一下我的使用方式,因为基础不好所以使用的很粗糙
checkfile(){
if [ “$1” = “” ];then
return 0
fi
sudo mii-tool |grep “eth0: negotiated 1000baseT-HD flow-control, link ok” |grep -v \”grep\”|wc –l > /home/pi/a.txt”
cat /home/pi/a.txt |grep “
1”|grep−v“grep”|wc−l‘if[
check_res -gt 0 ];then
check_res=
return 1
else
return 0
fi
}
while [ 1 ] ; do
Checkfile “eth0: negotiated 1000baseT-HD flow-control, link ok”
check_result1=
?if[
check_result1 -eq 1 ];then
echo ” Riticle is OK !!! !!!”
else
echo ” Riticle is NO !!! !!!”
done
如果是C语言调用脚本
Unsigned char cmd[]=”sudo mii-tool |grep \”eth0: negotiated 1000baseT-HD flow-control, link ok\” |grep -v \”grep\”|wc –l ` > /home/pi/a.txt”;
System(cmd);
open a.txt read a.txt 查看结果就可以了