感谢代码。
由于
答案 0 :(得分:2)
尝试以下方法:
#include <string.h>
#include <netdb.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
char hn[254];
char *dn;
struct hostent *hp;
gethostname(hn, 254);
hp = gethostbyname(hn);
dn = strchr(hp->h_name, '.');
if ( dn != NULL ) {
printf("%s\n", ++dn);
}
else {
printf("No domain name available through gethostbyname().\n");
}
return 0;
}
似乎getdomainname()只会告诉你一个NIS或YP域名,你可能不会设置它。另一方面,使用gethostbyname()查询完整主机名,检查各种不同的源(包括DNS和/ etc / hosts)以确定您的规范主机名。
答案 1 :(得分:0)
为了将来参考,Linux和其他一些系统有一个getdomainname()
function可以做你想要的,尽管这是not part of the POSIX standard。
答案 2 :(得分:0)
#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
int i;
struct hostent *he;
struct in_addr **addr_list;
if (argc != 2) {
fprintf(stderr,"usage: ghbn hostname\n");
return 1;
}
if ((he = gethostbyname(argv[1])) == NULL) {
herror("gethostbyname");
return 2;
}
printf("domain name is: %s\n", he->h_name);
printf(" IP addresses: ");
addr_list = (struct in_addr **)he->h_addr_list;
for(i = 0; addr_list[i] != NULL; i++) {
printf("%s ", inet_ntoa(*addr_list[i]));
}
printf("\n");
return 0;
}
run command:
gcc -o test test.c
./test www.google.com
Output:
domain name is: google.com
IP addresses: 172.217.163.110