服务器之家

服务器之家 > 正文

C语言+shell实现linux网卡状态检测

时间:2021-06-27 18:22     来源/作者:handyhuang

本文实例为大家分享了C语言+shell实现linux网卡状态检测的具体代码,供大家参考,具体内容如下

不解释,直接上代码 要求linux环境具备grep和awk(awk可选)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int get_if_status(char *if_name)
{
  char  buffer[BUFSIZ];
 char  cmd[100];
  FILE  *read_fp;
  int    chars_read;
  int    ret =0;
  
  memset( buffer, 0, BUFSIZ );
  memset( cmd, 0, 100 );
 sprintf(cmd, "ifconfig -a | grep %s",if_name);
  read_fp = popen(cmd, "r");
  if ( read_fp != NULL )
  {
    chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);
 pclose(read_fp);
 
    if (chars_read > 0)
    {
      ret = 1;
    }
    else
    {
  fprintf(stderr, "%s: NO FOUND\r\n",if_name);
  return 0;
    }
  }
 
 if(ret == 1)
 {
 memset( buffer, 0, BUFSIZ );
 memset( cmd, 0, 100 );
 sprintf(cmd, "ifconfig |grep %s",if_name);
 read_fp = popen(cmd, "r");
 if ( read_fp != NULL )
 {
   chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);
   pclose(read_fp);
  
   if (chars_read > 0)
   {
     ret = 2;
   }
   else
   {
  fprintf(stderr, "%s: DOWN\r\n",if_name);
  return 1;
   }
 }
 }
 
 if(ret == 2)
 {
 memset( buffer, 0, BUFSIZ );
 memset( cmd, 0, 100 );
 sprintf(cmd, "ifconfig %s | grep RUNNING | awk '{print $3}'",if_name);
 read_fp = popen(cmd, "r");
 if ( read_fp != NULL )
 {
   chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);
   pclose(read_fp);
  
   if (chars_read > 0)
   {
  fprintf(stderr, "%s: LINKED\r\n",if_name);
  return 3;
   }
   else
   {
  fprintf(stderr, "%s: UNPLUGGED\r\n",if_name);
  return 2;
   }
 }
 }
 
 return -1;
}
 
 
int main(int argc, char* argv[])
{
  int i=0;
 if(argc != 2)
 {
 fprintf(stderr, "usage: %s <ethname>", argv[0]);
 return -1;
 }
 
  i = get_if_status(argv[1]);
  printf( "if_status = %d\n", i );
  return 0;
}

嵌入式编译 mips-linux-gnu-gcc -mips32 -EL -mhard-float -Wall -o netlink netlink.c

测试结果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ./netlink eth100
eth100: NO FOUND
if_status = 0
#
# ifconfig eth0 down
# ./netlink eth0
eth0: DOWN
if_status = 1
#
# ifconfig eth0 up
# ./netlink eth0
eth0: UNPLUGGED
if_status = 2
#
# ./netlink eth0
eth0: LINKED
if_status = 3

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/handyhuang/article/details/17588789

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部

1358
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40