2011年7月10日日曜日

イメージを描画する(11.1)

ネットワークインターフェイスの一覧を取得したい。
めも

/////////////// ネットワークインターフェイスの取得 ///////////////
     int socketFD,length, lastLength;
    char *buffer;
    struct ifconf ifc;
    
    socketFD = socket(AF_INET, SOCK_DGRAM, 0);
    lastLength = 0;
    length = sizeof(struct ifreq) * 100;
    NSLog(@"length:%d",length);
    
    for (; ;) {
        
        buffer = (char *)calloc(length, sizeof(char));
        ifc.ifc_len = length;
        ifc.ifc_ifcu.ifcu_buf = buffer;
        
        if ( ioctl(socketFD, SIOCGIFCONF, &ifc) < 0) {
            int erroNumber = errno;
            NSLog(@"%s",strerror(erroNumber));
        } 
        else {
            
            if (ifc.ifc_len == lastLength) {
                break;
            }
            
            lastLength = ifc.ifc_len;
        }
        
        length += sizeof(struct ifreq) * 10;
        free(buffer);
    }
    
    struct ifreq *ifr = (struct ifreq *)buffer;
    int next = 0;
    /////////////// 表示してみる ///////////////
    while (ifr < (struct ifreq *)(buffer + lastLength)) {
        
        ifr = (struct ifreq *)(buffer + next);
        NSLog(@"interface:%s",ifr->ifr_name);
        next += IFNAMSIZ + ifr->ifr_ifru.ifru_addr.sa_len;
        
    }
    free(buffer);
    close(socketFD);
同じのがいっぱい出た。

0 件のコメント:

コメントを投稿