欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

用C/C++實(shí)現(xiàn)linux下檢測(cè)網(wǎng)絡(luò)接口狀態(tài)

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

本文實(shí)例為大家分享了使用C/C++實(shí)現(xiàn)linux下檢測(cè)網(wǎng)絡(luò)接口狀態(tài),供大家參考,具體內(nèi)容如下

要寫個(gè)檢測(cè)網(wǎng)絡(luò)接口鏈接狀態(tài)的東西,又不喜歡不斷的ping別的地址,也不想調(diào)用其他命令行工具來(lái)做這個(gè),于是在google了n多內(nèi)容未果之后,搜到個(gè)檢測(cè)工具的源代碼。

以下代碼在fedora 9 / CentOS 5.2下調(diào)試通過(guò):)

#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <errno.h>
#include <net/if.h>
 
struct ethtool_value 
{
 __uint32_t cmd;
 __uint32_t data;
};
 
/*return 1:has cable; return 0:no cable*/
int detect_eth_cable(char *ifname) 
{
 struct ethtool_value edata;
 struct ifreq ifr;
 int fd = -1, err = 0;
 
 memset(&ifr, 0, sizeof(ifr));
 strcpy(ifr.ifr_name, ifname);
 
 fd = socket(AF_INET, SOCK_DGRAM, 0);
 if (fd < 0) {
  //perror("Cannot get control socket");
  return -1;
  }
 edata.cmd = 0x0000000A;
 ifr.ifr_data = (caddr_t)&edata;
 err = ioctl(fd, 0x8946, &ifr);
 if (err == 0) {
  fprintf(stdout, "Link detected: %s\n", edata.data ? "yes":"no");
 } else if (errno != EOPNOTSUPP) {
  perror("Cannot get link status");
  }
 return(edata.data==1 ? 1:0);
}
int main(int argc, char**argv)
{
 detect_eth_cable("p1p1");
 return 0;
}

其他代碼:

int get_netportstatus(const char *interface) {
 char cmd[1024];
 char *tt;
 FILE *fp;
 int devflag;
 devflag=get_netflag(interface);
 if (devflag==DEV_DOWN) {
 sprintf(cmd,"ifconfig %s up",interface);
 system(cmd);
 }
 sprintf(cmd,"ethtool %s | grep \"Link detected\" > /tmp/eth.temp",interface);
 system(cmd);
 if (devflag==DEV_DOWN) {
 sprintf(cmd,"ifconfig %s down",interface);
 system(cmd);
 }
 fp=fopen("/tmp/eth.temp","r");
 if (fp==NULL) {
 system("rm -rf /tmp/eth.temp");
 return -1;
 }
 fgets(cmd,1024,fp);
 fclose(fp);
 system("rm -rf /tmp/eth.temp");
 tt=strstr(cmd,"no");
 if (tt!=NULL) return LINK_DOWN;
 tt=strstr(cmd,"yes");
 if (tt!=NULL) return LINK_UP;
 return -1;
}

#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <errno.h>
#include <net/if.h>
 
 
struct ethtool_value {
  __uint32_t  cmd;
  __uint32_t  data;
};
 
 
int main(int , char* [])
{
 struct ethtool_value edata;
 int fd = -1, err = 0;
 struct ifreq ifr;
 
 
  memset(&ifr, 0, sizeof(ifr));
  strcpy(ifr.ifr_name, "eth0");
  fd = socket(AF_INET, SOCK_DGRAM, 0);
  if (fd < 0) {
    perror("Cannot get control socket");
    return 70;
  }
  edata.cmd = 0x0000000a;
  ifr.ifr_data = (caddr_t)&edata;
  err = ioctl(fd, 0x8946, &ifr);
  if (err == 0) {
    fprintf(stdout, "Link detected: %s\n",
      edata.data ? "yes":"no");
  } else if (errno != EOPNOTSUPP) {
    perror("Cannot get link status");
  }
 return 0;
}
#include <net if.h=""> // IFF_RUNNING
 
//如果網(wǎng)卡已臉上網(wǎng)線,返回0,否則返回-1.
int check_nic(char *nic)
{
 struct ifreq ifr;
 int skfd = socket(AF_INET, SOCK_DGRAM, 0);
 
 strcpy(ifr.ifr_name, nic_name);
 if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
 {
  return -1;
 }
 if(ifr.ifr_flags & IFF_RUNNING)
  return 0; // 網(wǎng)卡已插上網(wǎng)線
 else return -1;
}
</net>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:C++檢測(cè)鍵盤某鍵是否按下的方法

欄    目:C語(yǔ)言

下一篇:C/C++讀寫文本文件、二進(jìn)制文件的方法

本文標(biāo)題:用C/C++實(shí)現(xiàn)linux下檢測(cè)網(wǎng)絡(luò)接口狀態(tài)

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/743.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有