---- Tony Mountifield tony@softins.co.uk wrote:
In article 20130624135817.10QZO.129278.root@cdptpa-web19-z02, Steve zephod@cfl.rr.com wrote:
Suppose I have this C++ program: #include <iostream> int main (int argc, char** argv) { while (1) { char cmd[80]; std::cin.getline(cmd, 80); std::cout << "response to " << cmd << std::endl; } }
compiled by: c++ -o junk junk.cpp
and I have this bash script: #!/bin/bash ./junk <<EOF blah bleh \cC EOF echo "Something else"
When I run the script, the program starts and waits for input forever. I have 2 questions:
- The "blah" and "bleh" line are not echoed to cout. Why not? Does the here document not send the data to stdin?
- How do I terminate the program? When run interactively, I use <ctrl>-C.
You should be testing the return value from std::cin.getline() for end-of-file. You are not testing it for any error. Always test return values.
My program is a quick-and-dirty way to simulate the actual program I am trying to use. I have no access to the code and all I know about it is that when I enter a command, it responds and the only way to kill it is with <ctrl>-C.
In your script, the end of the here document will cause your program to see end-of-file (this is NOT the string "EOF" - that's just the way you denote the end of the here doc).
I am aware of that. I'm trying to find a way to send the program <Ctrl>-C from the script.
And you really ought to find a forum or mailing list where this kind of question is ON-topic. Flagging the subject OT isn't a magic permission to post anything you like!
I agree, I really ought to.