在網路開發中 經常出現需要從主機名得到ip位址的情況 這時就使用gethostbyname
但是因為gethostbyname返回的是乙個指向靜態變數的指標 不可重入
很可能剛要讀時值就被其它執行緒修改
所以 新的posix中增加了另乙個可重入的從主機名(網域名稱)得到dns的孫數
gethostbyname_r
下面是它用法的簡單例子
code
#include
#include
#include
#define dump(...) printf(__va_args__)
int main(int argc,char** ar**) -
| | if(gethostbyname_r(ar**[1],&hostinfo,buf,sizeof(buf),&phost,&ret))
| printf("error:gethostbyname(%s) ret:%d,phost:%d/n",ar**[1],ret,(int)ph
| ost);
- else |
| return 0;
| }程式結果如下
code
wushuang:/var/www# ~/work/test/test www.google.com
argc:2
gethostbyname(www.google.com) success:ret:0,phost(-1073744112):name:www.google.akadns.net,addrtype:2(af_inet:2),len:4,addr[0]:-1073743784,[1]:0
host(-1073744112) alias is:www.google.com
host addr is:64.233.161.104
wushuang:/var/www#
hostent結構定義及說明如下
code
struct hostent
#define h_addr h_addr_list[0] /* for backward compatibility */
當h_addrtype == 4時,h_addr_list返回的就是 in_addr型別的值,可以使用inet_ntoa把它轉換成ip字串
gethostbyname 簡明用法
使用這個東西,首先要包含2個頭檔案 這個函式的傳入值是網域名稱或者主機名,例如 www.google.com wpc 等等。傳出值,是乙個hostent的結構 如下 如果函式呼叫失敗,將返回null。解釋一下這個結構,其中 char h name 表示的是主機的規範名。例如www.google.co...
gethostbyname 函式說明
gethostbyname 函式說明 用網域名稱或主機名獲取ip位址 包含標頭檔案 include include 函式原型 struct hostent gethostbyname const char name 這個函式的傳入值是網域名稱或者主機名,例如 www.google.cn 等等。傳出值...
linux下gethostbyname工作原理
既然這兩個函式能夠轉換 ip 和網域名稱,那麼,它們就會去訪問dns伺服器嗎?如果真的要去訪問,網路不通的情況下,它們又怎麼辦呢?帶著這些疑問,我在網上查了一下,並根據提示,做了一下試驗,簡單總結了一下 gethostbyname 網域名稱 ip gethostbyaddr ip 網域名稱 在解析的...