Я должен написать функцию, чтобы получить некоторую информацию о системе (самая важная информация - это архитектура). Я нашел функцию uname, которая может использоваться, включая sys/utsname.h. Ну, хотя я googled и я прочитал документацию, я не мог найти никакого примера функции, и я не понимаю, как использовать uname. Кто-нибудь может объяснить мне, как его использовать? было бы здорово, если бы вы могли написать пример. Спасибо заранее.
C как использовать функцию uname
Ответ 1
Сначала включите заголовок:
#include <sys/utsname.h>
Затем определите структуру utsname:
struct utsname unameData;
Затем вызовите uname() с указателем на struct:
uname(&unameData); // Might check return value here (non-0 = failure)
После этого структура будет содержать нужную информацию:
printf("%s", unameData.sysname);
http://opengroup.org/onlinepubs/007908775/xsh/sysutsname.h.html
Ответ 2
Полностью рабочий пример стоит тысячи слов.; -)
#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;
}
Ответ 3
Из документации, похоже, вы будете использовать ее так:
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
Функция uname()
принимает указатель на структуру utsname
, которая сохранит результат как входной. Поэтому просто создайте временный экземпляр utsname
, передайте его адрес uname
и прочитайте содержимое этой структуры после успешного выполнения функции.
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...
}