我有一個程序,將實驗的計數作爲命令字符串參數,並輸出浮點數序列。 例如: 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++的輸入?
所以,我需要在我的程序來調用這個程序,分析數的序列。
我有一個程序,將實驗的計數作爲命令字符串參數,並輸出浮點數序列。 例如: 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++的輸入?
所以,我需要在我的程序來調用這個程序,分析數的序列。
如果您使用的是Windows,那麼你需要做以下
有關示例,請看下面的鏈接。 http://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx
希望這是你在找什麼。
可以將一個程序打印到標準輸出(C++中的std::cout
)的數據傳送到另一個程序的標準輸入(std::cin
)。兩個程序如何連接的具體情況取決於環境(特別是操作系統和外殼)。
您可以創建包含您的數據(與>>
和<<
過載)一類
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上做管道雖然...
這似乎沒有關係到這個問題。 – 2011-05-19 13:01:17
@Sam - 我誤解了這個問題,我改進了我的答案。 – Tom 2011-05-19 13:04:02
我認爲這個問題更多的是關於IPC。 – ferosekhanj 2011-05-19 13:42:05
你是windows還是linux? – Tom 2011-05-19 12:33:46
您需要某種IPC:管道,共享內存或套接字。 – 2011-05-19 12:36:28
我在窗戶上。 – Mixabuben 2011-05-19 12:36:47