[ECOS] sdtin/stdout/stderr redirection
Philippe Vandermersch
phil@equator.com
Wed Apr 9 17:26:00 GMT 2003
Jifl.
I liked your proposal because I do not have to deal with C++ but :
1)
fclose( stdout ) failed :
ASSERT FAIL: <4>dlmalloc.cxx[765]do_check_chunk() (cyg_uint8 *)p >=
arenabase
ASSERT FAIL: <4>dlmalloc.cxx [ 765] do_check_chunk() (cyg_uint8 *)p >=
arenabase
TRACE: <4>sched.cxx [ 705] disinherit_priority() }}RETURNING UNSET!
TRACE: <4>mutex.cxx [ 447] unlock()
2)
If I do not close it and do simply : stdout = fdopen(fd_out , "w" )
seems to succeed but printf does print anything
3)
To make it work, I had to do this in C++:
Cyg_StdioStream *StdoutStream = new Cyg_StdioStream( fd_out,
Cyg_StdioStream::CYG_STREAM_WRITE, false, false, _IOLBF );
if(StdoutStream == NULL) return( ENOMEM );
stdout = (FILE *)StdoutStream;
It also works for stdin,stderr.
Phil.
Jonathan Larmour wrote:
> Philippe Vandermersch wrote:
>
>> Hi,
>>
>> I have created a filesystem over PCI which actually allows the Hosted
>> PCI board running eCos to access the Filesystem of the Host (running
>> Linux).
>> Now I would like to know if it is possible to redirect dynamically
>> eCos sdtin/stdout/stderr to some other fd than the usual 0,1,2.
>> My idea is to open the Linux stdin,sdtout,stderr and to affect the fd
>> obtained through my filesystem to the eCos ones.
>
>
> Strictly the way to do this is using freopen() but that isn't fully
> supported by eCos, although it wouldn't be difficult at all - just
> dropped off the end several years ago now!
>
> You could even just do it yourself using fclose() and fdopen() and
> assigning to stdin - there's nothing else required AFAIK.
>
> Jifl
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss
More information about the Ecos-discuss
mailing list