2013-07-17 33 views
4

字符串要獲得文件的類型,我們可以執行命令店輸出(文件)命令在C

system("file --mime-type -b filename"); 

輸出顯示到terminal.But不能使用存儲文件類型命令

char file_type[40] = system("file --mime-type -b filename"); 

那麼如何使用系統(文件)函數將文件類型存儲爲字符串。

+0

返回值(將爲-1或只是命令執行的狀態。 – Jeyaram

+5

解決方案:http://stackoverflow.com/questions/43116/how-can-i-run-an-external-program-from-c-and-parse-its-output。 – oldmonk

回答

4

請參閱system的手冊頁:它不返回執行命令的輸出(但是是錯誤代碼或命令的返回值)。

你想要的是popen。它會返回FILE*,您可以使用它來讀取命令的輸出(有關詳細信息,請參閱popen手冊頁)。

2

嗯,想到實現你想要的東西的第一個也是最簡單的方法是將輸出重定向到一個臨時文件,然後將它讀入一個char緩衝區。

system("file --mime-type -b filename > tmp.txt"); 

後,您可以使用fopenfscanf或任何你想讀取文件的內容。

當然,在嘗試讀取臨時文件之前,您會檢查返回值system()

4

您可以使用popen這樣的:)系統的

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    FILE *fp; 
    char file_type[40]; 

    fp = popen("file --mime-type -b filename", "r"); 
    if (fp == NULL) { 
     printf("Failed to run command\n"); 
     exit -1; 
    } 

    while (fgets(file_type, sizeof(file_type), fp) != NULL) { 
     printf("%s", file_type); 
    } 

    pclose(fp); 

    return 0; 
} 
+1

'sizeof(file_type)-1'是假的; 'sizeof file_type'就夠了。 (fgets總是導致一個以nul結尾的字符串)BTW:file_type沒有被初始化。注意:你不需要這些parens – wildplasser