2011-05-19 26 views
4

我有一個程序,將實驗的計數作爲命令字符串參數,並輸出浮點數序列。 例如: im_7.exe 10 10.41 13.33 8.806 14.95 15.55 13.88 10.13 12.22 9.09 10.45如何獲取一個程序的輸出並將其用作另一個C++的輸入?

所以,我需要在我的程序來調用這個程序,分析數的序列。

+2

你是windows還是linux? – Tom 2011-05-19 12:33:46

+0

您需要某種IPC:管道,共享內存或套接字。 – 2011-05-19 12:36:28

+0

我在窗戶上。 – Mixabuben 2011-05-19 12:36:47

回答

4

如果您使用的是Windows,那麼你需要做以下

  1. 創建使用Windows的API CreatePipe一個PIPE1。使用此管道讀取子進程的STDOUT中的數據。
  2. 以相同的方式創建Pipe2並使用該管道將數據寫入子進程的STDIN。
  3. 創建子進程並在啓動信息中提供這些句柄並繼承父進程的句柄。同時傳遞cmd行參數。
  4. 關閉Pipe1的寫入結束並讀取Pipe2的結束。
  5. 在你的情況下,你沒有寫入任何東西到子進程輸入。通過讀取Pipe1,您可以直接從子進程輸出中讀取數據。

有關示例,請看下面的鏈接。 http://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx

希望這是你在找什麼。

4

可以將一個程序打印到標準輸出(C++中的std::cout)的數據傳送到另一個程序的標準輸入(std::cin)。兩個程序如何連接的具體情況取決於環境(特別是操作系統和外殼)。

2

您可以創建包含您的數據(與>><<過載)一類

include <iostream> 
#include <iterator> 
#include <vector> 
class MyData 
{ 
public: 
    friend 
    std::istream& 
    operator>>(std::istream& in, MyData& data) 
    { 
    in >> data.size ; 
    data.m_data.resize(data.size); 
    std::copy( 
      std::istream_iterator<float>(in), 
      std::istream_iterator<float>(), 
      data.m_data.begin() 
      ); 
    } 
    friend 
    std::ostream& 
    operator<<(std::ostream& out, MyData& data) 
    { 
    out<< data.size << " "; 
    for(size_t i=0;i<data.size;++i){ 
     out<< data.m_data[i] <<" "; 
    } 
    return out; 
    } 
private: 
    int size; 
    std::vector<float> m_data; 
}; 

然後你就可以調用它像這樣

int 
main (int ac, char **av) 
{ 
    MyData d; 
    std::cin>>d; //input one set of data; 

    //test 
    std::cout<<d; 

    //get multiple data files 
    std::vector<MyData> buffer; 

    std::copy( 
      std::istream_iterator<MyData>(std::cin), 
      std::istream_iterator<MyData>(), 
     std::back_inserter(buffer)); // copies all data into buffer 

} 

在Linux上可形成測試管像這樣:

echo "4 1.1 2.2 3.3 4.4" | ./a.out 

不知道如何在Windows上做管道雖然...

+0

這似乎沒有關係到這個問題。 – 2011-05-19 13:01:17

+0

@Sam - 我誤解了這個問題,我改進了我的答案。 – Tom 2011-05-19 13:04:02

+1

我認爲這個問題更多的是關於IPC。 – ferosekhanj 2011-05-19 13:42:05

相關問題