GETHOSTNAME - Linux手册页
Linux程序员手册 第2部分
更新日期: 2019-10-10
名称
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
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说,如果发生此类截断,则不确定返回的缓冲区是否包含终止的空字节。
返回值
成功时,返回零。如果出错,则返回-1,并正确设置errno。
错误说明
- EFAULT
- 名称是无效的地址。
- EINVAL
- len为负数,或者对于sethostname(),len大于允许的最大大小。
- ENAMETOOLONG
- (glibc gethostname())len小于实际大小。 (在2.1版之前,glibc在这种情况下使用EINVAL。)
- EPERM
- 对于sethostname(),调用方在与其UTS命名空间关联的用户命名空间中不具有CAP_SYS_ADMIN功能(请参见namespaces(7))。
遵循规范
SVr4,4.4BSD(这些接口最早出现在4.2BSD中)。 POSIX.1-2001和POSIX.1-2008指定gethostname()而不指定sethostname()。
备注
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)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。