2016-01-29 45 views
-1

假设我已将myname.c编译为获取可执行文件myname。 我想命令后打印操作系统名称:在C中打印系统名称?

$ MYNAME --system名

输出: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, 
     ); 

    } 
+1

问题是什么?这是什么情况'如果(uname(&缓冲区)==系统名称){''应该做的?您正在阅读'str',但没有在任何地方使用。它的目的是什么? –

+0

由于误解,我尝试使用uanme()函数来获取关于系统的一些信息,并且我想创建多个条件,在用户输入特定名称(例如:$ myname --system name)之后将printf将输出当前的系统Linux。 –

+1

你的意思是if(strcmp(str,“system-name”)== 0)'看看用户是否输入了'system-name'? – Barmar

回答

2

我觉得这应该工作(你的缓冲区不是一个指针,你的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) 
0

我认为这是你在找什么:

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

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

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