Thanks Dave.<div>I don&#39;t know what&#39;s happening, but I solved it editing the code, and avoiding all the unnecessary output.</div><div>Now it works perfectly ;)</div><div><br><div class="gmail_quote">On Fri, Aug 20, 2010 at 1:30 PM, Dave Goodell <span dir="ltr">&lt;<a href="mailto:goodell@mcs.anl.gov">goodell@mcs.anl.gov</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Is your read done repeatedly, or just once?  Your code won&#39;t be portable in general if it assumes that you&#39;ll always get MAX_LEN out of the read() call.  Do you flush your stdout explicitly at any point?<br>


<br>
I&#39;m not sure why the buffering behavior would change when run under MPI or not.  If you are on Linux you can try to use strace to watch for relevant calls (ioctl, fcntl, etc). I think you can also use ltrace or a debugger to watch for calls to fflush, setvbuf, and similar, which will affect the buffering behavior of the standard library.<br>


<br>
You might also try to isolate whether it is being caused by using the MPI library (i.e. calling MPI_Init/MPI_Finalize/etc), or by being executed via mpiexec, or both.<br>
<br>
It looks like we call &quot;setbuf(stdout,NULL)&quot; at MPI_Init time, so that might be relevant.  Do you perform this redirection before or after MPI_Init time?<br>
<br>
-Dave<br>
<div><div></div><div class="h5"><br>
On Aug 20, 2010, at 9:30 AM CDT, Diego Fernández Slezak wrote:<br>
<br>
&gt; Hello,<br>
&gt;<br>
&gt; I have a working code that redirects stdout to a pipe, runs some code and then process the stdout (through the pipe):<br>
&gt;<br>
&gt;<br>
&gt;               /// Connect STDOUT to pipe<br>
&gt;               // Save old stdout.<br>
&gt;               saved_stdout = dup(STDOUT_FILENO);  // save stdout for display later<br>
&gt;               // create pipe<br>
&gt;               if( pipe(out_pipe) != 0 ) {          // make a pipe<br>
&gt;                       exit(1);<br>
&gt;               }<br>
&gt;               // connect stdout to pipe.<br>
&gt;               dup2(out_pipe[1], STDOUT_FILENO);   // redirect stdout to the pipe<br>
&gt;<br>
&gt; ...<br>
&gt; ...<br>
&gt; //at some point:<br>
&gt;               int read_bytes = read(out_pipe[0], buffer, MAX_LEN); // read from pipe into buffer<br>
&gt;<br>
&gt; ...<br>
&gt; ...<br>
&gt;<br>
&gt;               dup2(saved_stdout, STDOUT_FILENO);  // reconnect stdout for testing<br>
&gt;<br>
&gt;<br>
&gt; Now, if I try to run exactly the same code in MPI environment, the &quot;read&quot; function only retrieves part of the message.<br>
&gt; I think this could be because of some MPI redefinition of pipe buffer sizes or similar.<br>
&gt;<br>
&gt; Any ideas?<br>
<br>
</div></div>_______________________________________________<br>
mpich-discuss mailing list<br>
<a href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</a><br>
<a href="https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss" target="_blank">https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss</a><br>
</blockquote></div><br></div>