windows下C程序有多少种执行系统命令的方法

Ash*_*ana 2 c

我正在使用 MS Visual Studio 2008 进行 C 编码。

我知道我们可以使用“ int system(const char *command)”来执行命令。

有没有其他方法可以在C程序中执行系统命令。我还需要将执行命令的输出存储在变量中。

system()函数执行命令并将输出发送到stdout,有什么方法可以读取stdout变量并将其存储在变量中。

所以我的最终目标是在 Windows 的 C 程序中执行系统命令(使用 Visual Studio)并将该命令的输出存储在变量中。有什么建议 ?

Vol*_*And 5

标准 C 库仅提供一种在操作系统中执行外部命令的方法,因此请使用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;
}
Run Code Online (Sandbox Code Playgroud)

其中dir是要执行的程序,C:\*- 程序的参数,以及>- 该命令的标准输出重定向,之后TMP_FOLDER_CONTENT.txt将替换文件名。

您还可以检查返回值,如下所示:

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

或者考虑您使用的命令,更改程序的逻辑,例如:

int errorcode = system("dir C:\* > "TMP_FILE_NAME);
if( errorcode )
{
   return errorcode;
}
Run Code Online (Sandbox Code Playgroud)

更新:

或者,您可以在 C++ 中使用管道,例如,如问题“如何使用 POSIX 在 C++ 中执行命令并获取命令的输出?”的答案所示。