我应该编写一个函数来获取有关系统的一些信息(最重要的信息是架构)。我找到了可以使用的函数uname ,包括sys/utsname.h。好吧,虽然我用谷歌搜索并阅读了文档,但我找不到该函数的任何示例,而且我不明白如何使用 uname。任何人都可以解释我如何使用它?如果你也能写一个例子那就太好了。提前致谢。
问问题
32029 次
4 回答
27
首先,包括标题:
#include <sys/utsname.h>
然后,定义一个 utsname 结构:
struct utsname unameData;
然后,使用指向该结构的指针调用 uname():
uname(&unameData); // Might check return value here (non-0 = failure)
在此之后,结构将包含您想要的信息:
printf("%s", unameData.sysname);
http://opengroup.org/onlinepubs/007908775/xsh/sysutsname.h.html
于 2010-08-29T19:53:15.317 回答
21
一个完整的例子值一千字。;-)
#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;
}
于 2014-12-24T16:01:11.987 回答
9
从文档中,看起来您会像这样使用它:
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);
于 2010-08-29T19:54:41.660 回答
6
该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...
}
于 2010-08-29T19:52:04.353 回答