# gethostname

## NAME



           gethostname, sethostname - get/set hostname
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <unistd.h>**
    
           **int gethostname(char ***_name_**, size_t** _size_**);**
           **int sethostname(const char ***_name_**, size_t** _size_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **gethostname**():
               _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
                   || /* glibc 2.19 and earlier */ _BSD_SOURCE
    
           **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)
    


## DESCRIPTION



           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 array _name_.  The _size_ argument specifies the number of
           bytes in _name_.  (Thus, _name_ does not require a terminating null
           byte.)
    
           **gethostname**() returns the null-terminated hostname in the
           character array _name_ , which has a size of _size_ 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.
    


## RETURN VALUE



           On success, zero is returned.  On error, -1 is returned, and _errno_
           is set to indicate the error.
    


## ERRORS



           **EFAULT** _name_ is an invalid address.
    
           **EINVAL** _size_ is negative or, for **sethostname**(), _size_ is larger than
                  the maximum allowed size.
    
           **ENAMETOOLONG**
                  (glibc **gethostname**()) _size_ is smaller than the actual size.
                  (Before glibc 2.1, glibc uses **EINVAL** for this case.)
    
           **EPERM** For **sethostname**(), the caller did not have the
                  **CAP_SYS_ADMIN** capability in the user namespace associated
                  with its UTS namespace (see namespaces(7)).
    


## VERSIONS



           SUSv2 guarantees that "Host names are limited to 255 bytes".
           POSIX.1 guarantees that "Host names (not including the terminating
           null byte) are limited to **HOST_NAME_MAX** bytes".  On Linux,
           **HOST_NAME_MAX** is 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 the **gethostname**() system call;
           instead, it implements **gethostname**() as a library function that
           calls uname(2) and copies up to _size_ bytes from the returned
           _nodename_ field into _name_.  Having performed the copy, the function
           then checks if the length of the _nodename_ was greater than or
           equal to _size_ , and if it is, then the function returns -1 with
           _errno_ set to **ENAMETOOLONG** ; in this case, a terminating null byte
           is not included in the returned _name_.
    


## STANDARDS



           **gethostname**()
                  POSIX.1-2008.
    
           **sethostname**()
                  None.
    


* * *