C語言實現(xiàn)linux網(wǎng)卡連接檢測的方法
更新時間:2018年06月29日 09:55:04 作者:handyhuang
這篇文章主要為大家詳細介紹了C語言實現(xiàn)linux網(wǎng)卡連接檢測的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)linux網(wǎng)卡連接檢測的具體代碼,供大家參考,具體內(nèi)容如下
直接上代碼吧
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if.h>
#include <linux/mii.h>
#include <linux/sockios.h>
#include <errno.h>
int get_if_miireg(const char *if_name, int phy_id, int reg_num )
{
int fd = -1;
struct ifreq ifr;
struct mii_ioctl_data *mii;
int value;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror("socket");
close(fd);
return -1;
}
bzero(&ifr, sizeof(ifr));
strncpy(ifr.ifr_name, if_name, IFNAMSIZ-1);
ifr.ifr_name[IFNAMSIZ-1] = 0;
if (ioctl(fd, SIOCGMIIPHY, &ifr) < 0)
{
perror("ioctl");
close(fd);
return -1;
}
mii = (struct mii_ioctl_data *)&ifr.ifr_data;
mii->reg_num = reg_num;//0x01
if (ioctl(fd, SIOCGMIIREG, &ifr) < 0)
{
perror("ioctl");
close(fd);
return -1;
}
close(fd);
value = ((mii->val_out&0x04)>>2);
return value;
}
int main(int argc, char* argv[])
{
int i=0;
if(argc != 2)
{
fprintf(stderr, "usage: %s <ethname>", argv[0]);
return -1;
}
i = get_if_miireg(argv[1],0x10,0x01);
printf( "if_status = %d\n", i );
return 0;
}
只能識別網(wǎng)線是否連接,還沒識別網(wǎng)卡是否存在狀態(tài),也不識別網(wǎng)卡存在是否為down狀態(tài)。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言與java語言中關(guān)于二維數(shù)組的區(qū)別
這篇文章主要介紹了C語言與java語言中關(guān)于二維數(shù)組的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
C++深入講解new與deleted關(guān)鍵字的使用
這篇文章主要介紹了C++中new與deleted關(guān)鍵字的使用,new在動態(tài)內(nèi)存中為對象分配空間并返回一個指向該對象的指針;delete接受一個動態(tài)對象的指針, 銷毀該對象, 并釋放與之關(guān)聯(lián)的內(nèi)存2022-05-05

