错误说明

EFAULT
名称是无效的地址。
EINVAL
len为负数,或者对于sethostname(),len大于允许的最大大小。
ENAMETOOLONG
(glibc gethostname())len小于实际大小。 (在2.1版之前,glibc在这种情况下使用EINVAL。)
EPERM
对于sethostname(),调用方在与其UTS命名空间关联的用户命名空间中不具有CAP_SYS_ADMIN功能(请参见namespaces(7))。

备注

SUSv2保证"主机名限制为255个字节"。 POSIX.1保证"主机名(不包括终止空字节)限制为HOST_NAME_MAX字节"。在Linux上,HOST_NAME_MAX的值定义为64,这是自Linux 1.0起的限制(较早的内核限制为8个字节)。

C library/kernel differences

GNU C库不使用gethostname()系统调用;而是将gethostname()实现为库函数,该函数调用uname(2)并将最多len个字节从返回的nodename字段复制到name中。执行完复制后,函数将检查节点名的长度是否大于或等于len,如果是,则函数将errno设置为ENAMETOOLONG并返回-1;否则,函数返回-1。在这种情况下,返回的名称中不包含终止的空字节。

2.2之前的glibc版本处理节点名长度大于或等于len的情况有所不同:没有将任何内容复制到名称中,并且函数将errno设置为ENAMETOOLONG时返回-1。

另外参见

主机名(1),getdomainname(2),setdomainname(2),uname(2),uts_namespaces(7)

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

GETHOSTNAME - Linux手册页

Linux程序员手册 第2部分
更新日期: 2019-10-10

名称

gethostname,sethostname-获取/设置主机名

遵循规范

SVr4,4.4BSD(这些接口最早出现在4.2BSD中)。 POSIX.1-2001和POSIX.1-2008指定gethostname()而不指定sethostname()。

语法

#包括

int gethostname(char *名称,size_t len);
int sethostname(const char * name,size_t len);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

gethostname():

从glibc 2.12开始:_BSD_SOURCE || _XOPEN_SOURCE>= 500 || / *自glibc 2.12起:* / _POSIX_C_SOURCE>= 200112L
sethostname():
Since glibc 2.21:
        _DEFAULT_SOURCE
    In glibc 2.19 and 2.20:
        _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
    Up to and including glibc 2.19:
        _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

说明

这些系统调用用于访问或更改系统主机名。更准确地说,它们在与调用进程的UTS名称空间关联的主机名上运行。

sethostname()将主机名设置为字符数组名称中给定的值。 len参数指定名称中的字节数。 (因此,名称不需要终止的空字节。)

gethostname()返回字符数组名称中以null终止的主机名,该主机名的长度为len个字节。如果以空字符结尾的主机名太大而无法容纳,则该名称将被截断,并且不会返回错误(但请参见下面的注释)。 POSIX.1说,如果发生此类截断,则不确定返回的缓冲区是否包含终止的空字节。

日期:2019-08-20 17:58:49 来源:oir作者:oir