• linux C 获取与修改IP地址


    主要有两种方法:


    一种是用system执行shell命令,如:

    system("ifconfig usb0 192.168.1.188");  

      
    另一种用ioctl系统调用:

    int usb_chann_setip(char *ip)
    {
    	struct ifreq temp;
    	struct sockaddr_in *addr;
    	int fd = 0;
    	int ret =-1;
    
    	strcpy(temp.ifr_name, "usb0");
    
    
    	if((fd = socket(AF_INET, SOCK_STREAM, 0))<0){
    		++usb_info.setip_socket_open_failed;
    		return -1;
    	}
    
    	addr = (struct sockaddr_in *)&(temp.ifr_addr);
    	addr->sin_family = AF_INET;
    	addr->sin_addr.s_addr = inet_addr(ip);
    	ret = ioctl(fd, SIOCSIFADDR, &temp);
    	close(fd);
    
    	if(ret < 0){
    		++usb_info.setip_socket_ioctl_failed;
    		return -1;
    	}
    
    	return 0;
    }
    
    char *usb_chann_getip(char *ip_buf)
    {
    	struct ifreq temp;
    	struct sockaddr_in *myaddr;
    	int fd = 0;
    	int ret =-1;
    
    	strcpy(temp.ifr_name, "usb0");
    
    	if ((fd = socket(AF_INET, SOCK_STREAM, 0))<0){
    		++usb_info.getip_socket_open_failed;
    		return NULL;
    	}
    
    	ret = ioctl(fd, SIOCGIFADDR, &temp);
    	close(fd);
    
    	if (ret < 0){
    		++usb_info.getip_socket_ioctl_failed;
    		return NULL;
    	}
    
    	myaddr = (struct sockaddr_in *)&(temp.ifr_addr);
    	strcpy(ip_buf, inet_ntoa(myaddr->sin_addr));
    
    	return ip_buf;
    }



  • 相关阅读:
    5道趣味Python热身题【新手必学】
    操作系统特征
    二叉树的中序遍历
    英语一图画作文模板
    函数
    双阶乘与华里士公式
    因式分解
    【】连通图——详细解释
    【】this指针——c++中的特殊指针
    咱们程序员好用的云笔记
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6172408.html
Copyright © 2020-2023  润新知