C how to use the function uname
I should write a fun开发者_开发知识库ction 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.
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
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;
}
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);
The uname()
function takes a pointer to the utsname
structure that will store the result as input. Therefore, just make a temporary utsname
instance, pass the address of it to uname
, and read the content of this struct after the function succeed.
struct utsname retval;
if(uname(&retval) < 0) { // <----
perror("Failed to uname");
// error handling...
} else {
printf("System name = %s\n", retval.sysname);
// print other info....
// see http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/utsname.h.html
// for other members...
}
精彩评论