說明
在使用 gethostbyname() 的時候,你不能用perror() 列印錯誤信息(因為 errno 沒有使用),你應該調用 herror()。
Linux下的 herror(3)函式
內容簡介
包含頭檔案 #include <netdb.h>
函式定義 void herror( const char *s );
函式功能 程式的部分函式運行出錯時,先列印出自定義的文字說明字元串 *s ,然後列印出相關錯誤代碼的文字說明。
注意事項 請注意 herror() 與perror() 的區別
與其它相似的函式的區別與聯繫
與 perror(3) 的區別:
perror()函式的定義包含於頭檔案 #include <stdio.h> 一般應與 #include <errno.h> 配合使用
herror()函式的定義包含於頭檔案 #include <netdb.h> 一般服務於該頭檔案的函式,如 gethostbyname(3) 、gethostbyaddr(3) 等等。
程式例子(C語言)
/* ********************************************
* 編譯:保存為檔案 test.c ,在Linux
* 的此檔案所在目錄下輸入命令
* gcc test.c -o test
* (運行)./test
* 程式輸出:Can't get IP address: Unknown host
* 錯誤原因:代碼中指代域名的參數 hostname 是一個空字元串 '\0' ;
********************************************* */
#include <netdb.h>
#define NULL (void *)0
int main( int argc, char *argv[ ] )
{
char *hostname = "" ; //申明需要解析的域名地址(不含http://),為了輸出錯誤,這裡賦值為空
struct hostent *hent; //存儲函式gethostbyname(3)的返回值
if ( (hent = gethostbyname(hostname)) == NULL )
{
herror("Can't get IP address"); // herror(3)在這裡被使用
return -1;
};
return 0;
}
/* **************************** END OF TEST.C ***************************************** */