www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Grabing C(++) stdout

reply "Chris" <wendlec tcd.ie> writes:
Short question: how can I grab the stdout written to by C(++), 
i.e.

C code:

fwrite(...);

std.cstream will be replaced sooner or later.
Jul 23 2014
next sibling parent "Adam D. Ruppe" <destructionator gmail.com> writes:
On Wednesday, 23 July 2014 at 14:53:35 UTC, Chris wrote:
 Short question: how can I grab the stdout written to by C(++), 
 i.e.
If it is another program, try this: http://dlang.org/phobos/std_process.html#pipeProcess If you want to grab something written by another part of your same program... I'm not sure.
Jul 23 2014
prev sibling parent reply "John Colvin" <john.loughran.colvin gmail.com> writes:
On Wednesday, 23 July 2014 at 14:53:35 UTC, Chris wrote:
 Short question: how can I grab the stdout written to by C(++), 
 i.e.

 C code:

 fwrite(...);

 std.cstream will be replaced sooner or later.
I don't think I understand the question. stdout is the same file handle, doesn't matter whether that's using c++'s cout, c's stdout in stdio.h or D's std.stdio.stdout writeln("hello world"); is just short for stdout.writeln("hello world"); also, if you want c io functions, import core.stdc.stdio; If you're wanting to grab the output from another process, take a look at std.process
Jul 23 2014
parent reply "Chris" <wendlec tcd.ie> writes:
On Wednesday, 23 July 2014 at 15:12:13 UTC, John Colvin wrote:
 On Wednesday, 23 July 2014 at 14:53:35 UTC, Chris wrote:
 Short question: how can I grab the stdout written to by C(++), 
 i.e.

 C code:

 fwrite(...);

 std.cstream will be replaced sooner or later.
I don't think I understand the question. stdout is the same file handle, doesn't matter whether that's using c++'s cout, c's stdout in stdio.h or D's std.stdio.stdout writeln("hello world"); is just short for stdout.writeln("hello world"); also, if you want c io functions, import core.stdc.stdio; If you're wanting to grab the output from another process, take a look at std.process
It's a small library written in C++. I can either load it dynamically or incorporate it into my program. Either way, when the C++ part does its job, I can see the correct output in the console window, but I cannot grab it. After analyzing the C++ code, it seems that it uses fwrite and writes to stdout. When I grab stdout I only get the output from the D part, not from the C++ part.
Jul 23 2014
next sibling parent reply "John Colvin" <john.loughran.colvin gmail.com> writes:
On Wednesday, 23 July 2014 at 15:22:41 UTC, Chris wrote:
 On Wednesday, 23 July 2014 at 15:12:13 UTC, John Colvin wrote:
 On Wednesday, 23 July 2014 at 14:53:35 UTC, Chris wrote:
 Short question: how can I grab the stdout written to by 
 C(++), i.e.

 C code:

 fwrite(...);

 std.cstream will be replaced sooner or later.
I don't think I understand the question. stdout is the same file handle, doesn't matter whether that's using c++'s cout, c's stdout in stdio.h or D's std.stdio.stdout writeln("hello world"); is just short for stdout.writeln("hello world"); also, if you want c io functions, import core.stdc.stdio; If you're wanting to grab the output from another process, take a look at std.process
It's a small library written in C++. I can either load it dynamically or incorporate it into my program. Either way, when the C++ part does its job, I can see the correct output in the console window, but I cannot grab it. After analyzing the C++ code, it seems that it uses fwrite and writes to stdout. When I grab stdout I only get the output from the D part, not from the C++ part.
What do you mean by "grab"?
Jul 23 2014
parent reply "Chris" <wendlec tcd.ie> writes:
On Wednesday, 23 July 2014 at 15:27:23 UTC, John Colvin wrote:
 On Wednesday, 23 July 2014 at 15:22:41 UTC, Chris wrote:
 On Wednesday, 23 July 2014 at 15:12:13 UTC, John Colvin wrote:
 On Wednesday, 23 July 2014 at 14:53:35 UTC, Chris wrote:
 Short question: how can I grab the stdout written to by 
 C(++), i.e.

 C code:

 fwrite(...);

 std.cstream will be replaced sooner or later.
I don't think I understand the question. stdout is the same file handle, doesn't matter whether that's using c++'s cout, c's stdout in stdio.h or D's std.stdio.stdout writeln("hello world"); is just short for stdout.writeln("hello world"); also, if you want c io functions, import core.stdc.stdio; If you're wanting to grab the output from another process, take a look at std.process
It's a small library written in C++. I can either load it dynamically or incorporate it into my program. Either way, when the C++ part does its job, I can see the correct output in the console window, but I cannot grab it. After analyzing the C++ code, it seems that it uses fwrite and writes to stdout. When I grab stdout I only get the output from the D part, not from the C++ part.
What do you mean by "grab"?
Redirect it from stdout to somewhere else. If I do something like this (based on an admittedly old example) std.c.stdio.freopen("test.txt".ptr, "w+", dout.file); If I have writeln("Bla"); "Bla" is in the text file. But the string from C++ is not in there.
Jul 23 2014
next sibling parent reply "Chris" <wendlec tcd.ie> writes:
The C++ code does this:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE 
* stream );
// stream is stdout

and text appears in the console (a string).

I don't how to grab the text that is written to console. I might 
have to redirect it from within the C++ code.
Jul 23 2014
next sibling parent "Martijn Pot" <martijnpot52 gmail.com> writes:
On Wednesday, 23 July 2014 at 15:35:59 UTC, Chris wrote:
 The C++ code does this:

 size_t fwrite ( const void * ptr, size_t size, size_t count, 
 FILE * stream );
 // stream is stdout

 and text appears in the console (a string).

 I don't how to grab the text that is written to console. I 
 might have to redirect it from within the C++ code.
If it can be done offline, I think you can redirect the console output to a file.
Jul 23 2014
prev sibling parent reply "FreeSlave" <freeslave93 gmail.com> writes:
On Wednesday, 23 July 2014 at 15:35:59 UTC, Chris wrote:
 The C++ code does this:

 size_t fwrite ( const void * ptr, size_t size, size_t count, 
 FILE * stream );
 // stream is stdout

 and text appears in the console (a string).

 I don't how to grab the text that is written to console. I 
 might have to redirect it from within the C++ code.
I've created simple example (for Linux) - https://bitbucket.org/FreeSlave/redirect-example/src It works as expected. Nothing writes to console, but to file.
Jul 23 2014
parent "Chris" <wendlec tcd.ie> writes:
On Wednesday, 23 July 2014 at 16:46:04 UTC, FreeSlave wrote:
 On Wednesday, 23 July 2014 at 15:35:59 UTC, Chris wrote:
 The C++ code does this:

 size_t fwrite ( const void * ptr, size_t size, size_t count, 
 FILE * stream );
 // stream is stdout

 and text appears in the console (a string).

 I don't how to grab the text that is written to console. I 
 might have to redirect it from within the C++ code.
I've created simple example (for Linux) - https://bitbucket.org/FreeSlave/redirect-example/src It works as expected. Nothing writes to console, but to file.
FreeSlave Thanks a million, just tried it, this one fixed it for me. My mistake was to use std.stdout instead of std.c.stdio.stdout (I thought they were the same). Next I'll see, if there's a way I can grab it directly without referring to a text file.
Jul 24 2014
prev sibling parent "Adam D. Ruppe" <destructionator gmail.com> writes:
On Wednesday, 23 July 2014 at 15:30:53 UTC, Chris wrote:
 Redirect it from stdout to somewhere else.
It might be writing to stderr instead of stdout... does anything change if you reopen stderr too?
Jul 23 2014
prev sibling parent "FreeSlave" <freeslave93 gmail.com> writes:
It's still unclear. What exactly do you mean my grabbing? Please 
provide some minimal example where the problem occurs.
Jul 23 2014