![[Contents]](../images/toc_d.gif) 
 ![[Index]](../images/index.gif) 
 ![[Help]](../images/help_d.gif) 
 ![[Retrace]](../images/retrace_d.gif) 
 ![[Browse <]](../images/prev.gif) 
 ![[Browse >]](../images/next.gif) 
The more characters that are processed in each I/O request, the higher the
total throughput of the device.  The following technique will minimize
device overhead for reads:
   *  Use the sdcmd_query command to get the number of characters currently
      in the buffer (see the devices/serial.h autodocs for information on
      SDCMD_QUERY).
   *  Use doio() to read all available characters (or the maximum size of
      your buffer).  In this case, doio() is guaranteed to return without
      waiting.
   *  If zero characters are in the buffer, post an asynchronous request
      (sendio()) for 1 character.  when at least one is ready, the device
      will return it.  Now go back to the first step.
   *  If the user decides to quit the program, abortio() any pending
      requests.