首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Beej's Guide 第 18 章:gethostname() —— 我是誰?

     編輯:關於C

函數原型


#include <unistd.h>

int gethostname(char *hostname, size_t size);

參數說明

  • hostname:輸出緩衝區指針,用於存儲主機名字串 (以 \0 結尾)。
  • size:緩衝區大小 (位元組)。若主機名過長會被截斷 (不保證以 \0 結尾,建議分配足夠大,如 256 字節)。

返回值

  • 0:成功。
  • -1:失敗,設置 errno (如 ENAMETOOLONG 緩衝區太小)。

使用場景

  1. 獲取本機主機名用於日誌、標識、集群選舉。
  2. 配合 gethostbyname() (或現代 getaddrinfo()) 解析本機 IP 地址。

代碼示例


#include <stdio.h>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>

int main()
{
    char hostname[256];
    if (gethostname(hostname, sizeof(hostname)) == 0)
    {
        printf("主機名: %s\n", hostname);

        // 進一步解析 IP
        struct hostent *he = gethostbyname(hostname);
        if (he)
        {
            struct in_addr **addr_list = (struct in_addr **)he->h_addr_list;
            for (int i = 0; addr_list[i] != NULL; i++)
            {
                printf("IP %d: %s\n", i, inet_ntoa(*addr_list[i]));
            }
        }
    }
    else
    {
        perror("gethostname");
    }
    return 0;
}

注意

  • gethostbyname 為過時 API,非線程安全,新代碼請用 getaddrinfo。
  • 主機名通常為短名 (不含域名),FQDN 需 DNS 查詢或 getaddrinfo 配合 AI_CANONNAME。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved