in reply to (tye)Re: STDOUT and SWIG
in thread STDOUT and SWIG

tye,

That was a problem on my part and I am now capturing some small percentage of the data. I'm not sure why I'm not getting all of it unless its overloading the buffers (I've increased sendspace and recvspace to 128k via sysctl - but that still might not be enough - either way I'm still losing the same amount of data).

What bothers be is that I would think that capturing STDOUT via IO:Scalar should work and I wish I could figure out why its not.

The partial failure of one method and the complete failure of the other is really annoying me.

Replies are listed 'Best First'.
(tye)Re2: STDOUT and SWIG
by tye (Sage) on Aug 21, 2001 at 22:59 UTC

    IO::Scalar works by telling Perl that its STDOUT is not an ordinary file handle and so it has to do special processing when Perl's output functions like print try to write to it. C knows nothing of Perl's STDOUT and doesn't use Perl's output functions like print, so IO::Scalar has absolutely no affect on C code (nor on output written by child processes, etc.).

    The order of the layers goes something like this: print, STDOUT, Perl's informal I/O abstraction layer, C's stdio (FILE handles), operating system I/O functions (file descriptors). The C code of SWIG is probably starting at the "C's stdio" layer but could also just be going to the Unix I/O layer of write() and file descriptors. In any case, the C code is not going to be affected by any of the layers above that.

    That is, unless it went out of its way to try to use Perl's I/O routines. I doubt doing that would be easy.

            - tye (but my friends call me "Tye")