有多少种方法可以在 C 程序中执行 Windows 的系统命令



我正在使用MS visual studio 2008进行C编码。

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

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

system()函数执行命令并将输出发送到stdout,有没有办法从stdout读取并存储在变量中。

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

标准 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;
}

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

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

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

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

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

更新:

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

你可以按照@VolAnd所说的去做,或者如果你不关心/不希望命令的输出是stdout的,你也不想打印任何其他东西stdout你可以使用 freopen 将 stdout 设置为你选择的文件。

最新更新