Quote:
Originally Posted by jim mcnamara
Also note: popen is a one way deal - you choose either to write to or to read from a child process, popen will not let you do both at the same time. Otherwise, you get into more interesting and advanced interprocess communication (IPC) programming like maybe pipes.
|
That's right! The
POSIX.1-2001 function popen() only allows to read or write, not both. But if you look closely to my implementation, I don't actually use popen(). Instead, I created an popen2() that opens two pipes for the parent process (infp, outfp). Try that with "cat" for instance.
Code:
if (popen2("your-program-B", &infp, &outfp) <= 0)
{
printf("Unable to exec your-program-B\n");
exit(1);
}
memset (buf, 0x0, sizeof(buf));
/*
* writing to stdin here
*/
write(infp, "Z\n", 2);
write(infp, "D\n", 2);
write(infp, "A\n", 2);
write(infp, "C\n", 2);
close(infp);
/*
* reading stdout here
*/
read(outfp, buf, 128);
printf("buf = '%s'\n", buf);
I wrote and then I read from the child process "your-program-B"