Linux C - 获取服务器主机名?

10

有人知道一个获取Linux服务器主机名的函数吗?我不想包含任何头文件或编译其他库,希望有默认内置的函数。我是C语言新手 :)


2
C语言中没有内置函数。您需要包含头文件和/或链接库。您是在谈论运行在您的计算机上的服务器还是另一个服务器? - Rafe Kettler
2个回答

31

想知道类似于 gethostname() 的函数吗?

这个函数可以返回你的应用程序正在运行的机器名称。

或者从其他地方读取。

/proc/sys/kernel/hostname

更新

简单的例子

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {

    char hostname[1024];
    gethostname(hostname, 1024);

    puts(hostname);

    return EXIT_SUCCESS;
}

你能提供一个如何在屏幕上打印它的例子吗?别笑,但我尝试了以下代码,但它报错了 :) int gethostname(char *name, size_t len); printf("%s\n",name); - Joe
你应该将 sizeof(hostname) -1 作为长度传递给 gethostname()。否则,如果发生截断,你可能会得到没有空终止符的结果。根据我的 man 手册:“ POSIX.1 表示,如果发生这种截断,则返回的缓冲区是否包含终止空字节是未指定的。” - scai
为了使其有所作用,您还需要确保hostname[1023]为空。在这种情况下,您可以继续将sizeof(hostname)传递给它,然后在gethostname()返回后将hostname[1023]设置为空。 - reirab

5

在Alain Pannetier的答案基础上,您可以通过使用HOST_NAME_MAX来节省一些字节:

#include <limits.h>
...
  char hostname[HOST_NAME_MAX+1];
  gethostname(hostname, HOST_NAME_MAX+1);
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接