Linux下gethostbyname_h_addr_list

本文通过一个简单的C语言示例程序介绍了如何使用gethostbyname函数来获取主机名对应的地址信息。该程序首先调用gethostname函数获取当前主机的名称,然后通过gethostbyname函数获取并打印该主机的相关信息。





  struct hostent
{
  char* h_name;
  char** h_aliases;
  short h_addrtype;
  short h_length;
  char**h_addr_list;
};


//linux
#include<netdb.h>
struct hostent *  gethostbyname(const char*hostname);
error:return NULL and set  h_errno


//compile:gcc gethostbyname.c
//run:./a.out
#include<stdio.h>
#include<netdb.h>
#include<unistd.h>
#include<string.h>
int main(int argc,char* argv[])
{
    char ret_hostname[65];
    gethostname(ret_hostname,sizeof(ret_hostname));;//#include<unistd.h>
    printf("by gethostname() get hostname:%s\n",ret_hostname);
    
    struct hostent *ret_hostent;
 ret_hostent=gethostbyname(ret_hostname);
 printf("h_name %s\nh_aliases %s\nh_addrtype %d\nh_length %d\nh_addr_list %s\n",
               ret_hostent->h_name,         
                               *(ret_hostent->h_aliases),
                                             ret_hostent->h_addrtype,
                                                          ret_hostent->h_length,
                                                                          *(ret_hostent->h_addr_list+1));
printf("sizeof(h_addr_list[0]) is %lu\n",sizeof(ret_hostent->h_addr_list[0]));//long unsigned int
printf("strlen(h_addr_list[0]) is %zu\n",strlen(ret_hostent->h_addr_list[0]));//size_t
//type:  int   char   char*     unsigned int       long unsigned int      size_t   float   double    long int   
//format:%d    %c      %s        %u                   %lu                  %zu     %f       %lf       %ld

printf("%d %d %d %d\n",ret_hostent->h_addr_list[0][0]&0xFF,ret_hostent->h_addr_list[0][1]&0xFF,ret_hostent->h_addr_list[0][2]&0xFF,
               ret_hostent->h_addr_list[0][3]&0xFF);//big_endian
return 0;}

/*
  struct hostent
{
  char* h_name;
  char** h_aliases;
  short h_addrtype;
  short h_length;
  char**h_addr_list;
};

//linux
#include<netdb.h>
struct hostent *  gethostbyname(const char*hostname);
error:return NULL and set  h_errno
*/


out in screen 屏幕打印
ubuntu@linuxc_easy:~/linuxc_easy/pcdtest$ gcc gethostbyname.c                                                                                                             
ubuntu@linuxc_easy:~/linuxc_easy/pcdtest$ ./a.out                                                                                                                         
by gethostname() get hostname:linuxc_easy                                                                                                                                 
h_name linuxc_easy                                                                                                                                                        
h_aliases (null)                                                                                                                                                          
h_addrtype 2                                                                                                                                                              
h_length 4                                                                                                                                                                
h_addr_list (null)                                                                                                                                                        
sizeof(h_addr_list[0]) is 8                                                                                                                                               
strlen(h_addr_list[0]) is 2                                                                                                                                               
172 17 0 4    


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值