[gambit-list] How to monitor arbitrary file descriptors?
Jörg F. Wittenberger
Joerg.Wittenberger at softeyes.net
Mon Jul 15 14:49:15 EDT 2019
Am Mon, 15 Jul 2019 11:39:26 -0400
schrieb Marc Feeley <feeley at iro.umontreal.ca>:
> You can use the ##open-predefined procedure to convert a file
> descriptor into a Scheme port. The ##wait-input-port procedure can
> then be used on the port as shown in the example below. You can also
> use the usual Gambit I/O procedures for doing I/O (for example a
> read-char on the port will block until data is available on the file
> descriptor).
>
> Marc
Thank you Marc. This looks like the thing I've been looking for.
So far I did not try. Just reading the source makes me wonder:
lib/io.scm around line 5280 I found the definition of
`##open-predefined`. It looks as if there is an oversight: it
completedly ignores the optional `settings` parameter. Shouldn't this
be somehow mangled into the second parameter of the call to
`##make-path-psettings`?
Best
/Jörg
>
> (c-declare #<<end-of-c-declare
>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
>
> end-of-c-declare
> )
>
> (define O_RDONLY ((c-lambda () int "___return(O_RDONLY);")))
> (define O_WRONLY ((c-lambda () int "___return(O_WRONLY);")))
> (define O_RDWR ((c-lambda () int "___return(O_RDWR);")))
>
> (define posix-open (c-lambda (char-string int int) int "open"))
>
> (define (open path)
> (let* ((fd (posix-open path O_RDWR 0))
> (port (##open-predefined 3 path fd)))
> port))
>
> (define fifo (open "fifo")) ;; created with: mkfifo fifo
>
> (println "waiting for data on fifo...")
> (##wait-input-port fifo) ;; wait for data to be readable on fd
> (println "done waiting!")
> (println (read-char fifo))
>
>
> > On Jul 15, 2019, at 9:43 AM, Jörg F. Wittenberger
> > <Joerg.Wittenberger at softeyes.net> wrote:
> >
> > Hi,
> >
> > I'm trying to wait for IO on some file descriptor.
> >
> > The case at hand is not really relevant, it's a unix domain socket
> > in this case. But the same issue would easily apply to other
> > libraries too.
> >
> > So far I found the gamsock library as a start. But this ties up the
> > processor in a loop attempting to receive, learn EWOULDBLOCK and
> > retry.
> >
> > As I said, I'm not at all sold to the gamsock library or the API. I
> > just want a thread to block on a raw file descriptor for IO. So
> > maybe there is a way to create a port from a raw file descriptor?
> > Or anything like that? How would it be done?
> >
> > Thank you so much.
> >
> > /Jörg
> >
> >
> > _______________________________________________
> > Gambit-list mailing list
> > Gambit-list at iro.umontreal.ca
> > https://mailman.iro.umontreal.ca/cgi-bin/mailman/listinfo/gambit-list
>
>
More information about the Gambit-list
mailing list