NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |VERSIONS |STANDARDS |HISTORY |SEE ALSO |COLOPHON | |
gethostname(2) System Calls Manualgethostname(2)gethostname, sethostname - get/set hostname
Standard C library (libc,-lc)
#include <unistd.h>int gethostname(char *name, size_tsize);int sethostname(const char *name, size_tsize); Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):gethostname(): _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L || /* glibc 2.19 and earlier */ _BSD_SOURCEsethostname(): 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)
These system calls are used to access or to change the system hostname. More precisely, they operate on the hostname associated with the calling process's UTS namespace.sethostname() sets the hostname to the value given in the character arrayname. Thesize argument specifies the number of bytes inname. (Thus,name does not require a terminating null byte.)gethostname() returns the null-terminated hostname in the character arrayname, which has a size ofsize bytes. If the null-terminated hostname is too large to fit, then the name is truncated, and no error is returned (but see VERSIONS below). POSIX.1 says that if such truncation occurs, then it is unspecified whether the returned buffer includes a terminating null byte.
On success, zero is returned. On error, -1 is returned, anderrno is set to indicate the error.
EFAULTname is an invalid address.EINVALsize is negative or, forsethostname(),size is larger than the maximum allowed size.ENAMETOOLONG (glibcgethostname())size is smaller than the actual size. (Before glibc 2.1, glibc usesEINVALfor this case.)EPERMForsethostname(), the caller did not have theCAP_SYS_ADMINcapability in the user namespace associated with its UTS namespace (seenamespaces(7)).
SUSv2 guarantees that "Host names are limited to 255 bytes". POSIX.1 guarantees that "Host names (not including the terminating null byte) are limited toHOST_NAME_MAXbytes". On Linux,HOST_NAME_MAXis defined with the value 64, which has been the limit since Linux 1.0 (earlier kernels imposed a limit of 8 bytes).C library/kernel differences The GNU C library does not employ thegethostname() system call; instead, it implementsgethostname() as a library function that callsuname(2) and copies up tosize bytes from the returnednodename field intoname. Having performed the copy, the function then checks if the length of thenodename was greater than or equal tosize, and if it is, then the function returns -1 witherrno set toENAMETOOLONG; in this case, a terminating null byte is not included in the returnedname.
gethostname() POSIX.1-2008.sethostname() None.
SVr4, 4.4BSD (these interfaces first appeared in 4.2BSD). POSIX.1-2001 and POSIX.1-2008 specifygethostname() but notsethostname(). Versions of glibc before glibc 2.2 handle the case where the length of thenodename was greater than or equal tosize differently: nothing is copied intoname and the function returns -1 witherrno set toENAMETOOLONG.
hostname(1),getdomainname(2),setdomainname(2),uname(2),uts_namespaces(7)
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-05-17gethostname(2)Pages that refer to this page:crontab(1), hostname(1), logger(1), pmhostname(1), getdomainname(2), syscalls(2), uname(2), gethostid(3), rcmd(3), sysconf(3), hostname(5), org.freedesktop.hostname1(5), resolv.conf(5), systemd.unit(5), capabilities(7), user_namespaces(7), uts_namespaces(7), cron(8), lsof(8), nss-myhostname(8), systemd-hostnamed.service(8)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |