当前位置:  开发笔记 > 开发工具 > 正文

如何在C(主机名和域信息)中找到当前计算机的完整主机名?

如何解决《如何在C(主机名和域信息)中找到当前计算机的完整主机名?》经验,为你挑选了2个好方法。

在C项目(POSIX)中,如何获取当前系统的完全限定名称?

例如,我可以通过gethostname()unistd.h 获取我的机器的主机名 .这可能会给我machine3回报,但我实际上是在寻找machine3.somedomain.com例子.

我如何获取此信息?如果可能的话,我不想使用对system()的调用来执行此操作.



1> Zxaos..:

要获取计算机的完全限定名称,我们必须首先获取本地主机名,然后查找规范名称.

最简单的方法是首先使用uname()或获取本地主机名gethostname(),然后执行查找gethostbyname()并查看h_name它返回的结构的成员.如果您使用ANSI c,则必须使用uname()而不是gethostname().

例:

char hostname[1024];
hostname[1023] = '\0';
gethostname(hostname, 1023);
printf("Hostname: %s\n", hostname);
struct hostent* h;
h = gethostbyname(hostname);
printf("h_name: %s\n", h->h_name);

不幸的是,gethostbyname()在当前的POSIX规范中已弃用,因为它与IPv6不兼容.将使用此代码的更现代版本getaddrinfo().

例:

struct addrinfo hints, *info, *p;
int gai_result;

char hostname[1024];
hostname[1023] = '\0';
gethostname(hostname, 1023);

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; /*either IPV4 or IPV6*/
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME;

if ((gai_result = getaddrinfo(hostname, "http", &hints, &info)) != 0) {
    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(gai_result));
    exit(1);
}

for(p = info; p != NULL; p = p->ai_next) {
    printf("hostname: %s\n", p->ai_canonname);
}

freeaddrinfo(info);

当然,这仅在机器具有FQDN时才有效 - 如果不是,则结果getaddrinfo()与非限定主机名相同.



2> 小智..:

我的解决方案

#ifdef WIN32
    #include 
    #include 
#else
    #include 
#endif

void GetMachineName(char machineName[150])
{
    char Name[150];
    int i=0;

    #ifdef WIN32
        TCHAR infoBuf[150];
        DWORD bufCharCount = 150;
        memset(Name, 0, 150);
        if( GetComputerName( infoBuf, &bufCharCount ) )
        {
            for(i=0; i<150; i++)
            {
                Name[i] = infoBuf[i];
            }
        }
        else
        {
            strcpy(Name, "Unknown_Host_Name");
        }
    #else
        memset(Name, 0, 150);
        gethostname(Name, 150);
    #endif
    strncpy(machineName,Name, 150);
}

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有