首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C/C++中读取/重定向dos命令的输出到程序变量?

如何在C/C++中读取/重定向dos命令的输出到程序变量?
EN

Stack Overflow用户
提问于 2009-09-10 09:03:56
回答 5查看 4.7K关注 0票数 4

我想从我的程序中运行一个dos命令,例如"dir“命令。我是这样做的,

代码语言:javascript
复制
system("dir");

有没有办法将该命令的输出直接读取到程序变量中?

我们总是可以将输出重定向到一个文件,然后读取该文件,方法是

system("dir > command.out");

然后读取command.out文件。但是,我们如何直接做到这一点,而不是重定向到一个文件,然后读取?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-10 13:50:40

找到了另一种方式,或者更确切地说,是windows版的popen。它是_popen()。这对我来说恰到好处,而且使用起来也很简单。

代码语言:javascript
复制
   char   psBuffer[128];
   FILE   *pPipe;

   if( (pPipe = _popen( "dir", "rt" )) != NULL)
  {
     while(fgets(psBuffer, 128, pPipe))
     {
       printf(psBuffer);
     }
  }

通过完整的示例here查找详细信息。

票数 4
EN

Stack Overflow用户

发布于 2009-09-10 09:08:08

您不能将其重定向到变量,但您可以使用类似于Unix中链接命令的管道的技巧。调用CreateProcess(),传入一个STARTUPINFO实例,并在STARTUPINFO::dwFlags中设置相应的handles和STARTF_USESTDHANDLES。然后通过设置的句柄读取来自衍生进程的数据。

票数 4
EN

Stack Overflow用户

发布于 2009-09-10 09:15:39

如果您的库具有popen() POSIX函数,这就是您所需要的。您可以从管道读取命令输出,并以任何您喜欢的方式对其进行解析。

代码语言:javascript
复制
FILE *dir;
char direntry[80];

dir = popen("dir", "r");
while (!feof(dir)) {
    fgets(direntry, sizeof(direntry), dir);
    /* do something with direntry */
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1404189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档