【问题标题】:How many ways are there to execute system command in C program for windowswindows的C程序中执行系统命令有多少种方法
【发布时间】:2023-03-06 09:10:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 在标准 C 中?没有别的办法。如果您希望特定于平台的函数能够读取命令的输出,那么请对高级_popen 和低级CreateProcess 函数进行一些研究。两者都是 Windows 特定的功能。
  • 使用 system() 并将输出通过管道传输到临时文件中,打开并读取临时文件。

标签: c


【解决方案1】:

标准 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:\* - 程序的参数,&gt; - 该命令的标准输出重定向,之后将替换文件名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++ 中使用管道,例如问题 How to execute a command and get output of command within C++ using POSIX? 的答案中所示

【讨论】:

  • 有什么办法让我不需要额外的文件,我的意思是,直接将输出写入变量。
  • 不幸的是,你不能将你的程序设置为命令行命令输出接收器而不是stdout,更多的问题是system命令的执行方式——在我的例子中它是同步命令只有系统完成并返回值后才能执行执行和下一条命令
  • @AshishRana 我参考了类似的问题更新了答案 - 我想它可以提供帮助
【解决方案2】:

您可以按照@VolAnd 所说的那样做,或者如果您不关心/不希望命令的输出位于stdout 中,并且您也不希望将其他任何内容打印到@987654323 @您可以使用freopen 将标准输出设置为您选择的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多