Reputation: 53
I am a beginner so please be undertanding if the question is about sth obvious.
The current version of code is shown below. The output.txt is opened using ifstream and then fed to object of type Coll which is used because it understands "understands" the format of output.txt file generated.
std::system("./Pogram > output.txt");
Coll inputout;
ifstream ifsout("output.txt");
ifsout >> inputout;
My objective is to get rid of the intermediate output.txt and do sth like shown below.
FILE * f = popen("./Program", "r");
Coll inputout;
f >> inputout;
This yields the following error though:
error: no match for ‘operator>>’ in ‘f >> inputout’
Can you suggest any remedy to that?
Upvotes: 0
Views: 903
Reputation: 47794
May be this could work with pstream :
#include <pstream.h>
#include <string>
#include <iterator>
int main()
{
redi::ipstream proc("./Program");
typedef std::istreambuf_iterator<char> it;
std::string output(it(proc.rdbuf()), it());
Coll inputout;
output>>inputout; // You might have overloaded ">>"
}
Upvotes: 1
Reputation: 129364
Your problem is that popen
only provides a FILE *
, and I don't believe there is any (portable, reliable) way to convert that into a file-stream. So you will have to deal with using fgets
to read a line as a C string and stringstream
to convert it to your type, or using fscanf
or similar.
Upvotes: 1
Reputation: 3974
f
is of type FILE
which does not have an >>
operator. You need to use things like fread()
and fwrite()
. You also don't get all the fancy type conversions that ifstream lends to you, if you are to use FILE
you basically have to read and write directly in bits.
fread(&inputout, sizeof(Coll), 1, f);
This is reading memory from the current file location and putting it into the variable inputout
that is the size of a Coll x 1.
Upvotes: 0