如何列印hostent結構體中的所有資料

2021-06-09 00:53:21 字數 1780 閱讀 6269

問題:

hostent是gethostbyname()和gethostbyaddr()都會涉及到的乙個結構體。**如下:

struct hostent ;

gethostbyname()的原型是:

struct hostent *gethostbyname(const char *name);

函式的傳入值是網域名稱或者主機名,例如"www.google.com"、"191.168.1.253"等;

函式的返回值:

成功時,返回乙個指向hostent結構的指標;

失敗時,返回null。

程式設計除錯過程中需要檢視所取到的ip位址等資訊,所以將hostent的全部內容列印出來就對除錯很有幫助了。

解決辦法:

#include #include #include #include int main(int argc, char *argv)

/* get the host name */

hostname = argv[1];

// if ((host = (struct hostent*)gethostbyname(argv[1])) == null)

printf("host name is: %s\n", host->h_name);

/* printf all the aliases of host */

for(pptr = host->h_aliases; *pptr != null; pptr++)

printf("host addrtype is: %d\n", host->h_addrtype);

printf("host length is: %d\n", host->h_length);

// // printf("host is: %x\n", *((struct in_addr*)host->h_addr));

/* printf ip address according to addrtype */

switch(host->h_addrtype)

break;

default:

printf("unknown address type\n");

break;

} return 0;

}

程式的執行結果:

dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ ./pri-hostent 

usage: ./pri-hostent hostname(of ip addr such as 192.168.1.101)

dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ ./pri-hostent www.google.com

host name is: www.l.google.com

alias of host: www.google.com

host addrtype is: 2

host length is: 4

address: 74.125.128.106

address: 74.125.128.147

address: 74.125.128.99

address: 74.125.128.103

address: 74.125.128.104

address: 74.125.128.105

hostent和in addr結構體

一.hostent資料結構是這樣的 struct hostent typedef uint32 t in addr t struct in addr 這裡是這個資料結構的詳細資料 struct hostent h name 位址的正式名稱。h aliases 空位元組 位址的預備名稱的指標。h ad...

ios 列印 結構體

我們經常會輸出一些座標尺寸資訊之類的,比如view的frame,是cgrect型別的,用frame.oringial.x 和frame.size.width來做nslog引數好麻煩,還好蘋果對這些常用的資料提供了字串轉換的方法,如下 1 2 3 4 5 6 nsstring nsstringfrom...

gdb列印結構體member offset

linux的crash有個好處就是可以方便列印結構體成員變數的offset,有時候對彙編的時候,需要偏移,可惜crash需要乙個活體才行,不能單純的vmlinux,因為它就是這麼設計的 gdb天生沒有這個功能,不過python可以實現 cat offset.py import gdb class o...