如何将System of System函数存储到字符串中

时间:2010-10-22 15:14:04

标签: c++ windows

我尝试以下操作时:

system( "ifconfig -a | grep inet | "
          "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' "
          " > address.txt" ) ;

我在文件中获取输出。如何将输出分配给变量。

1 个答案:

答案 0 :(得分:1)

编辑:@Paul R评论中建议的最佳方法是使用_popen并读入stdin的命令输出。该MSDN页面上有示例代码。

原始努力:

一个选项是使用tmpnam_s创建临时文件,在那里写输出而不是硬编码文件名,然后将其从文件中读回std::string,删除临时文件完成后立即归档。基于MSDN示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <sstream>

int main( void )
{   
   char name1[L_tmpnam_s];
   errno_t err;

   err = tmpnam_s( name1, L_tmpnam_s );
   if (err)
   {
      printf("Error occurred creating unique filename.\n");
      exit(1);
   }
   stringstream command;
   command << "ifconfig -a | grep inet | " <<
          "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " <<
          " > " << (const char*)name1;
   system(command.str().c_str());

  {
     ifstream resultFile((const char*)name1);
     string resultStr;
     resultFile >> resultStr;

     cout << resultStr;
  }
  ::remove(name1);
}

此代码比平常使用CRT更多,但您似乎有一种您希望使用的方法依赖于此。