主题 : ioctl(SIOCSIFHWADDR):Device or resource busy 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 13280
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-01-21
最后登录: 2012-03-27
楼主  发表于: 2011-08-23 13:50

 ioctl(SIOCSIFHWADDR):Device or resource busy

我从网上找了一个修改mac地址的代码,在我pc的ubuntu的环境能够正常运行,放到arm板上总是提示:ioctl(SIOCSIFHWADDR):Device or resource busy 的错误。请问是什么原因啊
#include <syspes.h>  /* for socket(2) and related bits and pieces */

#include <sys/socket.h> /* for socket(2) */

#include <net/if.h>     /* for struct ifreq */

#include <net/if_arp.h> /* for ARPHRD_ETHER */

#include <sys/ioctl.h>  /* for IOCTL's */

#include <stdio.h>      /* for fprintf etc */

#include <unistd.h>     /* for close */





int main(int argc,char **argv)

{

    struct ifreq ifr;

    int skfd;



    if (argc<3) {

        fprintf(stderr,"usage:/n%s interface hwaddr/n",argv[1]);

        return 1;

    }



    /* Fill in the structure */

    snprintf(ifr.ifr_name, IFNAMSIZ, "%s", argv[1]);

    ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER;



    /* TODO: write some code to parse argv[2] into ifr.ifr_hwaddr.sa_data */

    /* memcpy(&ifr.ifr_hwaddr.sa_data, argv[2], sizeof(ether.address)); */

    /* Create a socket fd */

    skfd = socket(PF_INET,SOCK_STREAM,0);



    /* call the IOCTL */

    if (ioctl(skfd, SIOCSIFHWADDR, &ifr) < 0) {

        perror("ioctl(SIOCSIFHWADDR)");

        return 1;

    }



    /* cleanup */

    close(skfd);



    /* we're out of here! */

    return 0;

}