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
*/
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