2009-11-02 54 views
0

除getdomainname()之外有沒有什麼辦法可以在Linux上獲取域名而不必在/ etc中打開和解析文件?獲取Linux中的域名(C編程)

代碼表示讚賞。

感謝

+3

'getdomainname()'有什麼問題? – 2009-11-02 21:53:07

+0

即使設置了域,它也總是返回「none」 – wonderer 2009-11-02 21:54:44

+5

您很可能面臨配置問題而不是庫問題。你可能想在Serverfault上發佈一個類似的問題來試圖確定爲什麼'getdomainname()'不會返回你所期望的。 – 2009-11-02 21:56:55

回答

1

嘗試以下操作:

#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)以確定您的規範主機名。

+0

沒有最好的解決方案,因爲主機名並不總是具有域名,但足夠好 – wonderer 2009-11-03 14:25:47

0

以供將來參考,Linux和其他一些系統有一個getdomainname() function應該做你想要什麼,雖然這是not part of the POSIX standard

+0

謝謝,但是如果您閱讀我的問題,您可以看到我知道該功能 – wonderer 2009-11-02 22:15:08

+1

是的,但絕對是這樣,但您和其他來這裏回答同一問題的人可能會重視對文檔的參考。 – Tim 2009-11-02 22:27:25

+0

非常感謝。我在編寫代碼時閱讀該男子 – wonderer 2009-11-03 14:25:12