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.
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.
As of OS/390® Release 2, the uname() function will return "OS/390" as the sysname value, even if the true name of the operating system is different. This is for compatibility purposes. The version value will increase at every new version of the operating system.
The uname system call fills a structure with various system information, including the computer's network name and domain name, and the operating system version it's running. Pass uname a single argument, a pointer to a struct utsname object. Include <sys/utsname.
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With