簡體   English   中英

Windows的C程序中執行系統命令的方式有幾種

[英]How many ways are there to execute system command in C program for windows

我正在使用MS visual studio 2008進行C編碼。

我知道我們可以使用“ int system(const char *command) ”來執行命令。

還有其他方法可以在C程序中執行系統命令。 另外,我需要將執行命令的輸出存儲在變量中。

system()函數執行命令並將輸出發送到stdout ,有什么方法可以從stdout讀取並存儲在變量中。

因此,我的最終目標是在Windows的C程序中執行系統命令(使用Visual Studio)並將該命令的輸出存儲在變量中。 有什么建議么 ?

標准C庫僅提供一種在OS中執行外部命令的方法,因此請使用int system(const char *command)

您可以將該命令的輸出保存到文本文件,然后從程序中讀取該文件。

例如:

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

#define TMP_FILE_NAME "TMP_FOLDER_CONTENT.txt"

int main(int argc, char *argv[])
{
    system("dir C:\* > "TMP_FILE_NAME);
    FILE * fdir = fopen(TMP_FILE_NAME, "r");
    char buff[100];
    if (fdir)
    {
        while (1) {
            if (fgets(buff, 100, fdir) == NULL) break;
            printf("%s", buff);
        }
    }
    fclose(fdir);
    remove(TMP_FILE_NAME);
    return 0;
}

其中dir是要執行的程序, C:\\* -該程序的參數, > -該命令的標准輸出重定向,之后將替換文件名TMP_FOLDER_CONTENT.txt

您還可以檢查返回值,例如:

int errorcode = system("dir C:\* > "TMP_FILE_NAME);
printf("Command executed and returned a value %d\n", errorcode);

或考慮到您使用的命令,請更改程序的邏輯,例如:

int errorcode = system("dir C:\* > "TMP_FILE_NAME);
if( errorcode )
{
   return errorcode;
}

更新:

或者,您可以使用C ++中的管道,例如,如問題解答中所示, 如何使用POSIX在C ++中執行命令並獲取命令輸出?

您可以按照@VolAnd的說明進行操作,或者如果您不關心/不希望命令的輸出位於stdout並且也不想將其他任何內容打印到stdout ,則可以使用freopen進行設置標准輸出到您選擇的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM