C如何使用uname函数

En_*_*_t8 14 c function uname

我应该编写一个函数来获取有关系统的一些信息(最重要的信息是架构).我找到了可以使用的函数uname,包括sys/utsname.h.好吧,虽然我用Google搜索并阅读了文档,但我找不到该函数的任何示例,我不明白如何使用uname.任何人都可以解释我如何使用它?如果你能写一个例子,那将是很棒的.提前致谢.

Amb*_*ber 25

首先,包括标题:

#include <sys/utsname.h>
Run Code Online (Sandbox Code Playgroud)

然后,定义一个utsname结构:

struct utsname unameData;
Run Code Online (Sandbox Code Playgroud)

然后,使用指向struct的指针调用uname():

uname(&unameData); // Might check return value here (non-0 = failure)
Run Code Online (Sandbox Code Playgroud)

在此之后,结构将包含您想要的信息:

printf("%s", unameData.sysname);
Run Code Online (Sandbox Code Playgroud)

http://opengroup.org/onlinepubs/007908775/xsh/sysutsname.h.html


tup*_*uim 15

一个完全有效的例子胜过千言万语.;-)

#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;
}
Run Code Online (Sandbox Code Playgroud)

  • 应该在失败时使用 `perror`。不需要特别处理 `EFAULT`(它不会发生在你的代码中,因为 `buffer` 是一个局部变量的有效地址) (2认同)
  • 如果成功,uname() 可能会返回 0,代码必须更改为 `uname(&amp;buffer) &lt; 0` (2认同)

jke*_*ian 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);
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 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...
}
Run Code Online (Sandbox Code Playgroud)