I am creating a network administration program for a company I'm currently doing some contract work with (irrelevant I suppose)
As part of the program, I would like to have a console/telnet(type) clone. I have a working directory system, where I can essentially read all files in directories, and change directories. I also have an easy FTP protocol set up. However I would like to arbitrarily speak to different programs with the standard input/output procedures programmatically. I'm not opposed to DLL injection techniques, and other methods, as this is a benign program. If possible it would be awesome if I could just directly use the console easily. (system() would possibly work, however this doesn't allow continued communication or reading back of output)
I'm thinking so far of grabbing the PATH environment vars and utilizing that for std commands (ipconfig, netstat, etc) My networking library makes communication easy, but I'm just not sure how to interface with the program's console...
TL;DR:
Are there any predefined ways of standard console communication between programs?
As Jerry mentioned, what you're looking for is a pipe (CreatePipe). Two of them actually - one for input and one for output. You then create the new process with them set as stdin/stdout/stderr in STARTUPINFO passed to CreateProcess. You can then use WriteFile, ReadFile, PeekNamedPipe and friends to communicate.
A complete example is available on MSDN:
http://msdn.microsoft.com/en-us/library/ms682499(v=vs.85).aspx
And make sure you don't fall into these common pitfalls (which luckily Raymond Chen just happened to document recently):
PS, this is sooooo much easier in Python with the subprocess module.
The easiest way is usually to spawn the child program with _popen
. This will give you a handle to write to the child's standard input, or read from the child's standard output.
If you need to do both, things get a lot uglier in a hurry. You usually have to create the anonymous pipes yourself and specify them in a call to CreateProcess
, which is, frankly, a pain.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With