2016-01-29 46 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()參數列表末尾還有一個逗號。