我想从我的程序中运行一个dos命令,例如"dir“命令。我是这样做的,
system("dir");有没有办法将该命令的输出直接读取到程序变量中?
我们总是可以将输出重定向到一个文件,然后读取该文件,方法是
system("dir > command.out");
然后读取command.out文件。但是,我们如何直接做到这一点,而不是重定向到一个文件,然后读取?
发布于 2009-09-10 13:50:40
找到了另一种方式,或者更确切地说,是windows版的popen。它是_popen()。这对我来说恰到好处,而且使用起来也很简单。
char psBuffer[128];
FILE *pPipe;
if( (pPipe = _popen( "dir", "rt" )) != NULL)
{
while(fgets(psBuffer, 128, pPipe))
{
printf(psBuffer);
}
}通过完整的示例here查找详细信息。
发布于 2009-09-10 09:08:08
您不能将其重定向到变量,但您可以使用类似于Unix中链接命令的管道的技巧。调用CreateProcess(),传入一个STARTUPINFO实例,并在STARTUPINFO::dwFlags中设置相应的handles和STARTF_USESTDHANDLES。然后通过设置的句柄读取来自衍生进程的数据。
发布于 2009-09-10 09:15:39
如果您的库具有popen() POSIX函数,这就是您所需要的。您可以从管道读取命令输出,并以任何您喜欢的方式对其进行解析。
FILE *dir;
char direntry[80];
dir = popen("dir", "r");
while (!feof(dir)) {
fgets(direntry, sizeof(direntry), dir);
/* do something with direntry */
}https://stackoverflow.com/questions/1404189
复制相似问题