LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: baconer

Linux下的C编程怎样获取本机的IP地址?

[复制链接]
发表于 2005-7-11 08:40:50 | 显示全部楼层
楼上这样做是不对的。给你个短一点的,不很完善,可以凑合着用。

  1. BOOL get_my_address (struct in_addr *addr)
  2. {
  3.         struct ifreq req;
  4.         int sock;

  5.         sock = socket(AF_INET, SOCK_DGRAM, 0);
  6.         strncpy (req.ifr_name, "eth0", IFNAMSIZ);

  7.         if ( ioctl(sock, SIOCGIFADDR, &req) < 0 )
  8.         {
  9.                 DEBU(G "failed to ioctl: %s\n", strerror (errno));
  10.                 return FALSE;
  11.         }

  12.         memcpy (addr, &((struct sockaddr_in *) &req.ifr_addr)->sin_addr, sizeof (struct in_addr));
  13.         return TRUE;
  14. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-11 15:37:00 | 显示全部楼层
楼上的,谢谢你!不过你这个也不行,我改了改:
int get_my_address (struct in_addr *addr)
{
        struct ifreq req;
        int sock;

        sock = socket(AF_INET, SOCK_DGRAM, 0);
        strncpy (req.ifr_name, "eth0", IFNAMSIZ);

        if ( ioctl(sock, SIOCGIFADDR, &req) < 0 )
        {
                printf("failed to ioctl: %s\n", strerror (errno));
                return 0;
        }

        memcpy (addr, &((struct sockaddr_in *) &req.ifr_addr)->sin_addr, sizeof (struct in_addr));
        return 1;
}


int main(int argc, char *argv[])
{
      struct in_addr *addr;
      char *ip;
      
      if(get_my_address(addr))
      {      
       ip=inet_ntoa(*addr);

       printf("IP Address : %s\n",ip);
       }

    return 0;


}      
编译能通过,但执行后显示:段错误,得不到结果
回复 支持 反对

使用道具 举报

发表于 2005-7-11 16:28:01 | 显示全部楼层
在源码里加了注释
Post by baconer
楼上的,谢谢你!不过你这个也不行,我改了改:
int get_my_address (struct in_addr *addr)
{
        struct ifreq req;
        int sock;

        sock = socket(AF_INET, SOCK_DGRAM, 0);
        strncpy (req.ifr_name, "eth0", IFNAMSIZ);

        if ( ioctl(sock, SIOCGIFADDR, &req) < 0 )
        {
                printf("failed to ioctl: %s\n", strerror (errno));
                return 0;
        }

        memcpy (addr, &((struct sockaddr_in *) &req.ifr_addr)->sin_addr, sizeof (struct in_addr));
        return 1;
}


int main(int argc, char *argv[])
{
      /*struct in_addr *addr;
      addr没有分配内存啊!
      改为下面的应该行了吧*/
      struct in_addr addr;

      char *ip;
      
      if(get_my_address(addr))
      {      
       //ip=inet_ntoa(*addr);
       strncpy(ip, inet_ntoa(addr), sizeof(struct in_addr));

       printf("IP Address : %s\n",ip);
       }

    return 0;


}      
编译能通过,但执行后显示:段错误,得不到结果
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表