Provided by: manpages-dev_6.03-1_all bug


       uname - get name and information about current kernel


       Standard C library (libc, -lc)


       #include <sys/utsname.h>

       int uname(struct utsname *buf);


       uname() returns system information in the structure pointed to by buf.  The utsname struct
       is defined in <sys/utsname.h>:

           struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within communications network
                                     to which the node is attached, if any */
               char release[];    /* Operating system release
                                     (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware type identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */

       The length of the arrays in a struct utsname is unspecified (see NOTES);  the  fields  are
       terminated by a null byte ('\0').


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


       EFAULT buf is not valid.


       POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD.

       The domainname member (the NIS or YP domain name) is a GNU extension.


       The kernel  has  the  name,  release,  version,  and  supported  machine  type  built  in.
       Conversely,  the  nodename  field  is configured by the administrator to match the network
       (this is what the BSD historically calls the "hostname", and is set  via  sethostname(2)).
       Similarly, the domainname field is set via setdomainname(2).

       The  length of the fields in the struct varies.  Some operating systems or libraries use a
       hardcoded 9 or 33 or 65 or 257.  Other systems use SYS_NMLN  or  _SYS_NMLN  or  UTSLEN  or
       _UTSNAME_LENGTH.   Clearly,  it  is  a  bad  idea  to use any of these constants; just use
       sizeof(...).  SVr4 uses 257, "to support Internet hostnames" — this is the  largest  value
       likely to be encountered in the wild.

       Part of the utsname information is also accessible via /proc/sys/kernel/{ostype, hostname,
       osrelease, version, domainname}.

   C library/kernel differences
       Over time, increases in the size of the utsname structure have  led  to  three  successive
       versions   of   uname():   sys_olduname()   (slot   __NR_oldolduname),  sys_uname()  (slot
       __NR_olduname), and sys_newuname() (slot __NR_uname).  The first one used length 9 for all
       fields;  the  second  used  65; the third also uses 65 but adds the domainname field.  The
       glibc uname() wrapper function hides these details from applications,  invoking  the  most
       recent version of the system call provided by the kernel.


       uname(1), getdomainname(2), gethostname(2), uts_namespaces(7)