I should write a function to get some information about the system (the most important information is the the architecture). I found the function uname which can be used including sys/utsname.h. Well, though I googled and I read the documentation, I couldn't find any example of the function and I don't understand how to use uname. Anyone can explain me how to use it? it would be great if you can write an example, too. Thanks in advance.
C how to use the function uname
38.8k Views Asked by En_t8 At
4
There are 4 best solutions below
1

First, include the header:
#include <sys/utsname.h>
Then, define a utsname structure:
struct utsname unameData;
Then, call uname() with a pointer to the struct:
uname(&unameData); // Might check return value here (non-0 = failure)
After this, the struct will contain the info you want:
printf("%s", unameData.sysname);
http://opengroup.org/onlinepubs/007908775/xsh/sysutsname.h.html
0

From the documentation, it looks like you'd use it like so:
struct utsname my_uname;
if(uname(&my_uname) == -1)
printf("uname call failed!");
else
printf("System name: %s\nNodename:%s\nRelease:%s\nVersion:%s\nMachine:%s\n",
my_uname.sysname, my_uname.nodename, my_uname.release,my_uname.version,my_uname.machine);
4

A fully working example is worth a thousand words. ;-)
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>
int main(void) {
struct utsname buffer;
errno = 0;
if (uname(&buffer) < 0) {
perror("uname");
exit(EXIT_FAILURE);
}
printf("system name = %s\n", buffer.sysname);
printf("node name = %s\n", buffer.nodename);
printf("release = %s\n", buffer.release);
printf("version = %s\n", buffer.version);
printf("machine = %s\n", buffer.machine);
#ifdef _GNU_SOURCE
printf("domain name = %s\n", buffer.domainname);
#endif
return EXIT_SUCCESS;
}
The
uname()
function takes a pointer to theutsname
structure that will store the result as input. Therefore, just make a temporaryutsname
instance, pass the address of it touname
, and read the content of this struct after the function succeed.