一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

自己如何實(shí)現(xiàn)一個(gè)簡(jiǎn)化的程序ethcheck?

dyquk4xk2p3d ? 來(lái)源:良許Linux ? 2023-11-30 09:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、usb網(wǎng)卡應(yīng)該如何實(shí)現(xiàn)?

前文講了如何利用開源軟件ifplugd實(shí)現(xiàn)監(jiān)測(cè)網(wǎng)口狀態(tài)變化,

ifplugd的確可以實(shí)現(xiàn)監(jiān)測(cè)網(wǎng)卡的狀態(tài),并執(zhí)行相應(yīng)腳本,

但是有個(gè)前提,就是網(wǎng)口已經(jīng)注冊(cè)到系統(tǒng)中,即用ifconfig -a能查看到

如何是usb網(wǎng)卡這種設(shè)備,在插入usb口之后網(wǎng)口設(shè)備才會(huì)注冊(cè),

使用過(guò)程中可能隨時(shí)會(huì)拔掉usb網(wǎng)卡,

那么這種情況下,要想設(shè)置usb網(wǎng)卡,那么就就需要修改ifplugd程序。

為了方便大家理解,本文給大家講解如何自己實(shí)現(xiàn)一個(gè)簡(jiǎn)化的程序ethcheck

可以實(shí)現(xiàn)自動(dòng)監(jiān)測(cè)網(wǎng)卡是否存在

rk3568所有網(wǎng)口:

rk3568_r:/system#ifconfig-a
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
inet6addr:::1/128Scope:Host
UPLOOPBACKRUNNINGMTU:65536Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

dummy0Linkencap:EthernetHWaddrfa6c1b:7d
inet6addr:fe80:6cff1b7d/64Scope:Link
UPBROADCASTRUNNINGNOARPMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:8errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:560

sit0Linkencap:IPv6-in-IPv4
NOARPMTU:1480Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

ip6tnl0Linkencap:UNSPEC
NOARPMTU:1452Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

eth1Linkencap:EthernetHWaddr5a63dd:0bDriverrk_gmac-dwmac
UPBROADCASTMULTICASTMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0
Interrupt:51

ip_vti0Linkencap:UNSPEC
NOARPMTU:1480Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

eth0Linkencap:EthernetHWaddr5e63dd:0bDriverrk_gmac-dwmac
UPBROADCASTMULTICASTMTU:1500Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0
Interrupt:38

ip6_vti0Linkencap:UNSPEC
NOARPMTU:1364Metric:1
RXpackets:0errors:0dropped:0overruns:0frame:0
TXpackets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RXbytes:0TXbytes:0

二、程序設(shè)計(jì)

0.程序框圖

8ab7bcd0-8f10-11ee-939d-92fbcf53809c.png

1. 設(shè)置程序?yàn)槭刈o(hù)進(jìn)程

因?yàn)樵摮绦蜃罱K要在后臺(tái)執(zhí)行,并且常駐內(nèi)存,所以必須將該進(jìn)程設(shè)置為守護(hù)進(jìn)程

參考代碼如下:

voidinit_daemon(void)
{
intpid;
inti;

if(pid=fork())
exit(0);//是父進(jìn)程,結(jié)束父進(jìn)程?

elseif(pid

2. 確認(rèn)制定網(wǎng)口是否存在?

要確認(rèn)指定網(wǎng)口是否存在,主要通過(guò)/proc/net/dev 目錄下是否有該網(wǎng)口信息:

peng@ubuntu:~$cat/proc/net/dev
Inter-|Receive|Transmit
face|bytespacketserrsdropfifoframecompressedmulticast|bytespacketserrsdropfifocollscarriercompressed
lo:2616329200000026163292000000
eth0:2854447082432730000009182827088660000000

參考代碼:

staticchar*interface_name_cut(char*buf,char**name)
{
char*stat;
/*Skipwhitespace.Linewillincludeheaderspaces.*/
while(*buf=='')
buf++;
*name=buf;
/*Cutinterfacename.*/
stat=strrchr(buf,':');
*stat++='?';
returnstat;
}
/*
returnvalue:1exist0:no
*/
intcheck_interface_fromproc(char*interface)
{
FILE*fp;
charbuf[PROCBUFSIZ];
structinterface*ifp;
char*name;

/*Open/proc/net/dev.*/
fp=fopen(_PATH_PROC_NET_DEV,"r");
if(fp==NULL)
{
printf("openprocfileerror
");
return-1;
}

/*Dropheaderlines.*/
fgets(buf,PROCBUFSIZ,fp);
fgets(buf,PROCBUFSIZ,fp);

/*Onlyallocateinterfacestructure.Otherjobswillbedonein
if_ioctl.c.*/
while(fgets(buf,PROCBUFSIZ,fp)!=NULL)
{
interface_name_cut(buf,&name);
if(strcmp(interface,name)==0)
return1;
}
fclose(fp);
return0;
}

3. 指定網(wǎng)口不存在

如果檢測(cè)網(wǎng)口不存在,則需要休眠,然后繼續(xù)監(jiān)測(cè)/proc/net/dev文件。

4. 如果指定網(wǎng)口存在

則獲取該網(wǎng)口的IP地址,然后比較是否是指定的IP地址

網(wǎng)卡IP地址的獲取,主要通過(guò)系統(tǒng)調(diào)用ioctl()的 SIOCGIFADDR命令實(shí)現(xiàn)

參考代碼如下:

intgetLocalIp(constchar*eth,char*ip){
structifreqifr;
structsockaddr_insin;
intfd;
bzero(&ifr,sizeof(ifr));
if((fd=socket(AF_INET,SOCK_STREAM,0))

讀取的ip地址存放在參數(shù)ip指向的內(nèi)存中。

5. ip地址相同

如果網(wǎng)卡地址與指定的ip地址相同,那么不需要修改地址,休眠一段時(shí)間(根據(jù)實(shí)際操作的頻率設(shè)置時(shí)間),然后再監(jiān)測(cè)網(wǎng)口是否存在

6. IP地址不相同

如果ip地址不相同,則需要修改ip地址,

執(zhí)行我們提前設(shè)置好的腳本if.sh即可

#!/bin/bash

IPADDR=192.168.40.8
ETHPORT=eth1
echo"ethcheckset"$ETHPORT$IPADDR
echo$#
echo$0
echo$1
echo$2
if[$#-eq2];then
if[$1=$ETHPORT];then
echo$ETHPORT
if[$2="up"];then
ifconfig$ETHPORT$IPADDR
sleep1
ipruleaddfromalllookupmainpref9000
sleep1
echo1>/proc/sys/net/ipv4/ip_forward
iptables-F
echo"set"$ETHPORT"done"
elif[$2="down"];then
echo"down"
elif[$2="disable"];then
echo"disable"
elif[$2="error"];then
echo"error"
fi
fi
fi





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • USB接口
    +關(guān)注

    關(guān)注

    9

    文章

    707

    瀏覽量

    56965
  • RK3568
    +關(guān)注

    關(guān)注

    5

    文章

    584

    瀏覽量

    6396
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    自己做的個(gè)小抽獎(jiǎng)程序

    自己做的個(gè)小抽獎(jiǎng)程序,功能比較單,獲獎(jiǎng)的名字沒(méi)有移除,所以不排除重復(fù)的可能。另外加載的數(shù)據(jù)只能是文本文件,但是可以有excel文件轉(zhuǎn)換。
    發(fā)表于 12-05 22:40

    自己編的個(gè)程序,學(xué)習(xí)用的

    自己編的個(gè)程序,學(xué)習(xí)用的。。。。
    發(fā)表于 05-29 08:11

    能在138控制部分簡(jiǎn)化程序嗎?

    剛學(xué)習(xí)STM32,想用片164芯片和片138控制64個(gè)LED,實(shí)現(xiàn)跑馬燈效果,以下是自己寫的程序
    發(fā)表于 10-14 22:20

    分享個(gè)自己做的oled屏貪吃蛇程序

    分享個(gè)自己做的oled屏貪吃蛇程序程序是用stm32寫的,但是移植起來(lái)卻特別簡(jiǎn)單,oled是iic的,算是滿足
    發(fā)表于 07-10 11:08

    想要自己實(shí)現(xiàn)個(gè)bootloader,APROM中程序如何實(shí)現(xiàn)跳轉(zhuǎn),中斷向量表如何設(shè)置?

    我要自己實(shí)現(xiàn)個(gè)bootloader,bootloader在M487的APROM里面,APP也在APROM里面,如何實(shí)現(xiàn)從bootloade
    發(fā)表于 06-27 08:39

    用FPGA實(shí)現(xiàn)DES算法的密鑰簡(jiǎn)化算法

    介紹DES的密鑰算法,提出種用預(yù)計(jì)算簡(jiǎn)化密鑰計(jì)算的方法并公布了預(yù)計(jì)算的C語(yǔ)言源程序。這種方法對(duì) DES的硬件實(shí)現(xiàn)有非常好的簡(jiǎn)化效果。
    發(fā)表于 04-07 09:41 ?14次下載

    程序運(yùn)行之后把自己刪除的方法

      近日看到網(wǎng)友詢問(wèn)如何實(shí)現(xiàn)程序運(yùn)行之后把自己刪除的方法,不知大家對(duì)木馬甚么的興趣實(shí)在太濃,還是想要這樣的效果:用戶只要運(yùn)行程序,可執(zhí)行文
    發(fā)表于 08-30 11:38 ?3001次閱讀

    利用USBXpress開發(fā)包簡(jiǎn)化應(yīng)用程序實(shí)現(xiàn)USB通信設(shè)計(jì)

    傳統(tǒng)的USB設(shè)備驅(qū)動(dòng)程序編寫異常復(fù)雜,程序員往往很難入手。SILICON Laboratories公司提供的USBXpress開發(fā)包大大簡(jiǎn)化了USB通信的應(yīng)用和相關(guān)驅(qū)動(dòng)程序的開發(fā),只要
    的頭像 發(fā)表于 01-14 08:02 ?2924次閱讀
    利用USBXpress開發(fā)包<b class='flag-5'>簡(jiǎn)化</b>應(yīng)用<b class='flag-5'>程序</b><b class='flag-5'>實(shí)現(xiàn)</b>USB通信設(shè)計(jì)

    自己DIY制作個(gè)電流電壓表的程序些文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是自己DIY制作個(gè)電流電壓表的程序些文件免費(fèi)下載。
    發(fā)表于 05-23 17:42 ?57次下載
    <b class='flag-5'>自己</b>DIY制作<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>電流電壓表的<b class='flag-5'>程序</b>和<b class='flag-5'>一</b>些文件免費(fèi)下載

    如何自己制作個(gè)單片機(jī)開發(fā)板

    之所以做這個(gè)的初衷是應(yīng)為自己買的51 開發(fā)板已經(jīng)下載不了程序了,所以想做一個(gè)下載程序的最小系統(tǒng),可是做到后來(lái),就覺(jué)著這么大塊萬(wàn)用板只是做
    發(fā)表于 09-02 16:43 ?14次下載
    如何<b class='flag-5'>自己</b>制作<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>單片機(jī)開發(fā)板

    使用單片機(jī)實(shí)現(xiàn)LED隔個(gè)個(gè)程序和仿真資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)LED隔個(gè)個(gè)程序和仿真資料免費(fèi)下載。
    發(fā)表于 03-18 17:11 ?8次下載

    個(gè)程序是如何運(yùn)行起來(lái)的

    問(wèn)題。 還是和之前樣,我畫了程序運(yùn)行的全景圖,在上圖中,個(gè)程序運(yùn)行所經(jīng)歷的代碼段,我都標(biāo)
    的頭像 發(fā)表于 10-12 17:48 ?3685次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>程序</b>是如何運(yùn)行起來(lái)的

    stm32單片機(jī)如何實(shí)現(xiàn)個(gè)按鍵切換兩個(gè)程序?

    stm32單片機(jī)如何實(shí)現(xiàn)個(gè)按鍵切換兩個(gè)程序? 作為款功能強(qiáng)大的微控制器,STM32單片機(jī)可以
    的頭像 發(fā)表于 09-14 14:22 ?7063次閱讀

    如何編寫個(gè)自己的 starter

    前面給大家介紹了 SpringBoot 的自動(dòng)裝配功能,相信大家對(duì)自動(dòng)裝配都有了很好的理解,那么今天阿粉通過(guò)個(gè)示例來(lái)給大家演示下如何編寫個(gè)
    的頭像 發(fā)表于 10-08 14:42 ?1236次閱讀
    如何編寫<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>自己</b>的 starter

    如何自己搭建個(gè)服務(wù)器?

    如何自己搭建個(gè)服務(wù)器?自己搭建個(gè)服務(wù)器涉及到硬件和軟件兩
    的頭像 發(fā)表于 12-12 16:52 ?4609次閱讀