X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/dd3c57bc8cac59e0d657ee665ce462988d27d714..18c831dcd0ae4d660c70ccac69d27ed2a97851be:/sel/selbuf.3 diff --git a/sel/selbuf.3 b/sel/selbuf.3 new file mode 100644 index 0000000..cdf561b --- /dev/null +++ b/sel/selbuf.3 @@ -0,0 +1,106 @@ +.\" -*-nroff-*- +.TH selbuf 3 "23 May 1999" "Straylight/Edgeware" "mLib utilities library" +.SH NAME +selbuf \- line-buffering input selector +.\" @selbuf_enable +.\" @selbuf_disable +.\" @selbuf_setsize +.\" @selbuf_init +.\" @selbuf_destroy +.SH SYNOPSIS +.nf +.B "#include " + +.BI "void selbuf_enable(selbuf *" b ); +.BI "void selbuf_disable(selbuf *" b ); +.BI "void selbuf_setsize(selbuf *" b ", size_t " sz ); +.BI "void selbuf_init(selbuf *" b ", sel_state *" s ", int " fd , +.BI " lbuf_func *" func ", void *" p ); +.BI "void selbuf_destroy(selbuf *" b ); +.fi +.SH DESCRIPTION +The +.B selbuf +subsystem is a selector which integrates with the +.BR sel (3) +system for I/O multiplexing. It reads entire text lines from a file +descriptor and passes them to a caller-defined function. It uses the +line buffer described in +.BR lbuf (3) +to do its work: you should read about it in order to understand exactly +what gets considered to be a line of text and what doesn't, and the +exact rules about what your line handling function should and shouldn't +do. +.PP +The data for a line selector is stored in an object of type +.BR selbuf . +This object must be allocated by the caller, and initialized using the +.B selbuf_init +function. This requires a fair few arguments: +.TP +.BI "selbuf *" b +Pointer to the +.B selbuf +object to initialize. +.TP +.BI "sel_state *" s +Pointer to a multiplexor object (type +.BR sel_state ) +to which this selector should be attached. See +.BR sel (3) +for more details about multiplexors, and how this whole system works. +.TP +.BI "int " fd +The file descriptor of the stream the selector should read from. +.TP +.BI "lbuf_func *" func +The +.I "line handler" +function. It is passed a pointer to each line read from the file (or +null to indicate end-of-file), the length of the line, and an arbitrary +pointer (the +.I p +argument to +.B selbuf_init +described below). For full details, see +.BR lbuf (3). +.TP +.BI "void *" p +A pointer argument passed to +.I func +for each line read from the file. Apart from this, the pointer is not +used at all. +.PP +The +.B selbuf +selector is immediately active. Subsequent calls to +.B sel_select +on the same multiplexor will cause any complete lines read from the file +to be passed to your handling function. This function can at any time +call +.B selbuf_disable +to stop itself from being called any more. The selector is then +disengaged from the I/O multiplexor and won't do anything until +.B selbuf_enable +is called. Note that +.B selbuf_enable +may well immediately start emitting complete lines of text which were +queued up from the last I/O operation: it doesn't necessarily wait for +the next +.B sel_select +call. +.PP +The line buffer has a finite amount of memory for reading strings. The +size of this buffer is set by calling +.B selbuf_setsize +with the requested size. The default buffer size is 256 bytes. +.PP +When it's finished with, a line buffer selector must be destroyed by +calling +.BR selbuf_destroy . +.SH "SEE ALSO" +.BR lbuf (3), +.BR sel (3), +.BR mLib (3). +.SH AUTHOR +Mark Wooding,