www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Interacting between two different programs

reply "Jeremy DeHaan" <dehaan.jeremiah gmail.com> writes:
I've been toying around with the idea of working on an IDE, 
mostly because I think it would be an interesting/fun project to 
work on. In any case, the only thing I cannot seem to wrap my 
head around is how programs like Code Blocks and Visual Studio, 
and various other IDE's interact with debuggers as if it isn't 
some external thing.

How does someone have one program interact with another like 
this? Can you have one send its output to the other's input? Do 
they somehow share the same IO's? I've never had to write code 
that does anything like this so I'm you great minds out there can 
shed some light.

Thanks in advance!
Jun 28 2013
next sibling parent reply "yaz" <yazan.dabain gmail.com> writes:
On Saturday, 29 June 2013 at 06:08:28 UTC, Jeremy DeHaan wrote:
 I've been toying around with the idea of working on an IDE, 
 mostly because I think it would be an interesting/fun project 
 to work on. In any case, the only thing I cannot seem to wrap 
 my head around is how programs like Code Blocks and Visual 
 Studio, and various other IDE's interact with debuggers as if 
 it isn't some external thing.

 How does someone have one program interact with another like 
 this? Can you have one send its output to the other's input? Do 
 they somehow share the same IO's? I've never had to write code 
 that does anything like this so I'm you great minds out there 
 can shed some light.

 Thanks in advance!
You can use std.phobos.pipeProcess to interact with an external process that you spawn. This works by connecting the standard streams between the child and parent processes, so that they can send and receive data. GDB provides an interface that can be used with this kind of intercommunication. It is called GDB MI. You can read about it here http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_211.html#SEC216
Jun 29 2013
parent "Jeremy DeHaan" <dehaan.jeremiah gmail.com> writes:
On Saturday, 29 June 2013 at 07:45:01 UTC, yaz wrote:
 On Saturday, 29 June 2013 at 06:08:28 UTC, Jeremy DeHaan wrote:
 I've been toying around with the idea of working on an IDE, 
 mostly because I think it would be an interesting/fun project 
 to work on. In any case, the only thing I cannot seem to wrap 
 my head around is how programs like Code Blocks and Visual 
 Studio, and various other IDE's interact with debuggers as if 
 it isn't some external thing.

 How does someone have one program interact with another like 
 this? Can you have one send its output to the other's input? 
 Do they somehow share the same IO's? I've never had to write 
 code that does anything like this so I'm you great minds out 
 there can shed some light.

 Thanks in advance!
You can use std.phobos.pipeProcess to interact with an external process that you spawn. This works by connecting the standard streams between the child and parent processes, so that they can send and receive data. GDB provides an interface that can be used with this kind of intercommunication. It is called GDB MI. You can read about it here http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_211.html#SEC216
This was exactly what I was looking for, thanks! And thank you as well, Anthony. This is a lot of good information.
Jun 29 2013
prev sibling parent "Anthony J Bonkoski" <ajbonkoski gmail.com> writes:
On Saturday, 29 June 2013 at 06:08:28 UTC, Jeremy DeHaan wrote:
 I've been toying around with the idea of working on an IDE, 
 mostly because I think it would be an interesting/fun project 
 to work on. In any case, the only thing I cannot seem to wrap 
 my head around is how programs like Code Blocks and Visual 
 Studio, and various other IDE's interact with debuggers as if 
 it isn't some external thing.

 How does someone have one program interact with another like 
 this? Can you have one send its output to the other's input? Do 
 they somehow share the same IO's? I've never had to write code 
 that does anything like this so I'm you great minds out there 
 can shed some light.

 Thanks in advance!
At a more fundamental level, you might want to read about fork(), pipe(), execlp() UNIX-style system calls. Here's a nice document: http://www.makelinux.net/alp/038. Given, this is Unix-specific and Windows will be much different. However, you'll find this low-level understanding useful when using the higher-level APIs.
Jun 29 2013