uname
UNAME(E)            Linux Programmer's Manual            UNAME(E)



NAME
       uname - get name and information about current kernel

SYNOPSIS
       #include <sys/utsname.h>

       int uname(struct utsname *buf);

DESCRIPTION
       uname  returns system information in the structure pointed
       to  by  buf.    The   utsname   struct   is   defined   in
       <sys/utsname.h>:
              struct utsname {
                      char sysname[];
                      char nodename[];
                      char release[];
                      char version[];
                      char machine[];
              #ifdef _GNU_SOURCE
                      char domainname[];
              #endif
              };
       The  length  of the arrays in a struct utsname is unspeci-
       fied; the fields are NUL-terminated.

RETURN VALUE
       On success, zero is returned.  On error, -1  is  returned,
       and errno is set appropriately.

ERRORS
       EFAULT buf is not valid.

CONFORMING TO
       SVr4,  SVID, POSIX, X/OPEN.  There is no uname call in BSD
       4.3.

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

NOTES
       This is a system call, and the operating system presumably
       knows its name, release and version. It  also  knows  what
       hardware it runs on.  So, four of the fields of the struct
       are meaningful.  On the other hand, the field nodename  is
       meaningless:  it  gives the name of the present machine in
       some undefined network, but typically machines are in more
       than  one  network  and  have several names. Moreover, the
       kernel has no way of knowing about such things, so it  has
       to  be  told  what to answer here.  The same holds for the
       additional domainname field.

       To this end Linux uses the system calls sethostname(e) and
       setdomainname(e).   Note  that  there  is no standard that
       says that the hostname set by sethostname(e) is  the  same
       string  as  the  nodename  field of the struct returned by
       uname (indeed, some systems allow a 256-byte hostname  and
       an  8-byte  nodename), but this is true on Linux. The same
       holds for setdomainname(e) and the domainname field.

       The length of the fields in the struct varies. Some  oper-
       ating  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(...).  Often  257  is
       chosen in order to have room for an internet hostname.

       There  have  been  three  Linux  system calls uname(). The
       first one used length 9, the second one used 65, the third
       one also uses 65 but adds the domainname field.

       Part  of  the  utsname  information is also accessible via
       sysctl and via /proc/sys/kernel/{ostype,  hostname,  osre-
       lease, version, domainname}.

SEE ALSO
       uname(e), getdomainname(e), gethostname(e)



Linux 2.5.0                 2001-12-15                   UNAME(E)