On Sun, Nov 8, 2015 at 12:49 AM, Andreas Rottmann <a.rottm...@gmx.at> wrote:

> Artyom Poptsov <poptsov.art...@gmail.com> writes:
>
> > Oh sorry, there was a mistake in my previous mail.  'scm_i_fdes_to_port'
> > is an internal procedure, but 'scm_fdes_to_port' is defined as Guile API
> > and should be available to Guile programs.  Here's its definition:
> >
> > SCM
> > scm_fdes_to_port (int fdes, char *mode, SCM name)
> >
> > And the commentary that I quoted really applies to 'scm_fdes_to_port',
> > not to 'scm_i_fdes_to_port'.
> >
> Also note that if there's no requirement to actually implement this in
> C, there's `fdes->inport' and `fdes->outport' on the Scheme level, so
> something like the following would be analogous to the C example code
> posted:
>
>     (import (ice-9 binary-ports))
>
>     (define (process-fd fd)
>       (let ((port (fdes->inport fd)))
>         (display "read: ")
>         (display (get-bytevector-n port 100))
>         (display "\n")))
>
>     (process-fd (acquire-valid-fd))
>

This is something very similar that I ended up with. Just instead of
get-byte-vector, I used read-string!/partial.


> You could now just implement `acquire-valid-fd' in C and expose it to
> Scheme, if that is even necessary. If you have the FD available via
> e.g. an environment variable, `acquire-valid-fd' can be implemented in
> Scheme as well.
>
> Regards, Rotty
> --
> Andreas Rottmann -- <http://rotty.xx.vu/>
>

Thank you for all the responses!
-- 
Jan Synáček

Reply via email to