【问题标题】:print system name in C? [closed]在 C 中打印系统名称? [关闭]
【发布时间】:2016-01-29 23:21:14
【问题描述】:

假设我已编译 myname.c 以获得可执行文件 myname。 我想在命令后打印操作系统名称:

$myname --系统名称

输出:Linux

这是我目前所拥有的

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>

int main(int argc, char **argv) {

   struct utsname buffer;
   char str[70];
   scanf("%[^\n]",str);

   if (uname(&buffer) == system-name){

        printf(
            "%s",
            (&buffer)->sysname,
        );

   }

【问题讨论】:

  • 有什么问题?这个条件if (uname(&amp;buffer) == system-name){ 应该做什么?您正在阅读str,但未在任何地方使用。它的目的是什么?
  • 抱歉误会,我尝试使用 uanme() 函数来获取有关系统的一些信息,并且我想创建在用户输入特定名称后将 printf 的多重条件(例如:$myname --system name),会输出当前系统Linux。
  • 你的意思是if (strcmp(str, "system-name") == 0)看用户是否输入了system-name
  • 是的。这就是我的意思。

标签: c linux operating-system


【解决方案1】:

我认为这应该可行(您的缓冲区不是指针,并且您的 if 语句没有意义,您还应该在该声明方法中从 main 返回一些内容):

#include <stdio.h>
#include <stdlib.h>
#include <sys/utsname.h>

int main(int argc, char **argv) {
  struct utsname uts;
  if(uname(&uts) !=0 ) {
    return EXIT_FAILURE;
  }
  printf("%s\n",uts.sysname);
  return EXIT_SUCCESS;
}

【讨论】:

    【解决方案2】:

    在 linux 上要获得一些信息,您可以使用以下内容:

    #include<stdio.h>
    #include<sys/utsname.h>
    
    int main(void){
        struct utsname detect;
    
        uname(&detect);
    
        printf("System name - %s \n", detect.sysname);
        printf("Nodename    - %s \n", detect.nodename);
        printf("Release     - %s \n", detect.release);
        printf("Version     - %s \n", detect.version);
        printf("Machine     - %s \n", detect.machine);
        printf("Domain name - %s \n", detect.__domainname);
    
        return 0;
    }
    

    输出:

    System name - Linux 
    Nodename    - michi 
    Release     - 3.19.0-32-generic 
    Version     - #37~14.04.1-Ubuntu SMP Thu Oct 22 09:41:40 UTC 2015 
    Machine     - x86_64 
    Domain name - (none)
    

    【讨论】:

      【解决方案3】:

      我想这就是你要找的东西:

      if (strcmp(str, "system-name") == 0){
          printf("%s\n", buffer.sysname);
      }
      

      strcmp()是比较字符串的C函数,所以这会检查用户是否输入了system-name

      当你有一个结构时,你可以使用. 来访问它的一个元素,你不需要获取它的地址并使用间接。 printf() 参数列表的末尾还有一个额外的逗号。

      【讨论】: