filehndlr(3Tk)

Tk_CreateFileHandler, Tk_CreateFileHandler2, Tk_DeleteFileHandler - associate procedure callbacks with files or devices

As shipped in IRIX 6.5.7. Unchanged since IRIX 6.5.

NAME
     Tk_CreateFileHandler, Tk_CreateFileHandler2, Tk_DeleteFileHandler -
     associate procedure callbacks with files or devices

SYNOPSIS
     #include <tk.h>

     Tk_CreateFileHandler(id, mask, proc, clientData)

     Tk_CreateFileHandler2(id, proc2, clientData)                             |

     Tk_DeleteFileHandler(id)

ARGUMENTS
     int           id           (in)      Integer identifier for an open file
                                          or device (such as returned by open
                                          system call).

     int           mask         (in)      Conditions under which proc should
                                          be called:  OR-ed combination of
                                          TK_READABLE, TK_WRITABLE, and
                                          TK_EXCEPTION.

     Tk_FileProc   *proc        (in)      Procedure to invoke whenever the
                                          file or device indicated by id meets
                                          the conditions specified by mask.

     Tk_FileProc2  *proc2       (in)      Procedure to invoke from event loop
                                          to check whether fd is ready and, if
                                          so, handle it.

     ClientData    clientData   (in)      Arbitrary one-word value to pass to
                                          proc.


DESCRIPTION
     Tk_CreateFileHandler arranges for proc to be invoked in the future
     whenever I/O becomes possible on a file or an exceptional condition
     exists for the file.  The file is indicated by id, and the conditions of
     interest are indicated by mask.  For example, if mask is TK_READABLE,
     proc will be called when the file is readable.  The callback to proc is
     made by Tk_DoOneEvent, so Tk_CreateFileHandler is only useful in programs
     that dispatch events through Tk_DoOneEvent or through other Tk procedures
     that call Tk_DoOneEvent, such as Tk_MainLoop.

     Proc should have arguments and result that match the type Tk_FileProc:
          typedef void Tk_FileProc(
               ClientData clientData,
               int mask);
     The clientData parameter to proc is a copy of the clientData argument
     given to Tk_CreateFileHandler when the callback was created.  Typically,
     clientData points to a data structure containing application-specific
     information about the file.  Mask is an integer mask indicating which of
     the requested conditions actually exists for the file;  it will contain a
     subset of the bits in the mask argument to Tk_CreateFileHandler.

     Tk_CreateFileHandler2 also creates a file handler, but it provides a     |
     lower-level and more flexible interface.  The callback procedure proc2   |
     must have arguments and result that match the following prototype:       |
          typedef int Tk_FileProc2(                                           |
               ClientData clientData,                                         |
               int mask,                                                      |
               int flags);                                                    |

     Whereas a file handler created by Tk_CreateFileHandler is only invoked   |
     when the file is known to be ``ready'', a file handler created by        |
     Tk_CreateFileHandler2 is invoked on every pass through the the event loop|
     (Tk_DoWhenIdle); it gets to determine whether the file is ``ready'' or   |
     not.  The mask argument contains an OR'ed combination of the bits        |
     TK_READABLE, TK_WRITABLE, and TK_EXCEPTION, which indicate whether the   |
     file is known to be readable, writable, or to have an exceptional        |
     condition present (this is the case if select has been invoked since the |
     previous call to proc2, and if it indicated that the specified conditions|
     were present).  proc2 may use this information along with additional     |
     information of its own, such as knowledge about buffered data, to decide |
     whether the file is really ``ready''.  The flags argument is a copy of   |
     the flags passed to Tk_DoOneEvent, which may be used by proc2 to ignore  |
     the file if the appropriate bit, such as TK_FILE_EVENTS, is not present. |

     proc2 must return an integer value that is either TK_FILE_HANDLED or an  |
     OR-ed combination of TK_READABLE, TK_WRITABLE, and TK_EXCEPTION.  If the |
     return value is TK_FILE_HANDLED it means that the file was ``ready'' and |
     that proc2 handled the ready condition; Tk_DoOneEvent will return        |
     immediately.  If the return value is not TK_FILE_HANDLED, then it        |
     indicates the set of conditions that should be checked for the file if   |
     the current invocation of Tk_DoWhenIdle invokes select.  Typically the   |
     return value reflects all of the conditions that proc2 cares about.  A   |
     zero return value means that the file should be ignored if Tk_DoWhenIdle |
     calls select (this could happen, for example, if the flags argument      |
     specified that this file's events should be ignored).  The value returned|
     by proc2 only affects a select call from the current invocation of       |
     Tk_DoOneEvent;  the next invocation of Tk_DoOneEvent will call proc2     |
     afresh to get new information.

     There may exist only one handler for a given file at a given time.  If
     Tk_CreateFileHandler or Tk_CreateFileHandler2 is called when a handler
     already exists for id, then the new callback replaces the information
     that was previously recorded.

     Tk_DeleteFileHandler may be called to delete the file handler for id;  if
     no handler exists for the file given by id then the procedure has no
     effect.

     The purpose of file handlers is to enable an application to respond to X
     events and other events while waiting for files to become ready for I/O.
     For this to work correctly, the application may need to use non-blocking
     I/O operations on the files for which handlers are declared.  Otherwise
     the application may be put to sleep if it reads or writes too much data;
     while waiting for the I/O to complete the application won't be able to
     service other events.  In BSD-based UNIX systems, non-blocking I/O can be
     specified for a file using the fcntl kernel call with the FNDELAY flag.


KEYWORDS
     callback, file, handler