filehndlr(3Tk)
Tk_CreateFileHandler, Tk_CreateFileHandler2, Tk_DeleteFileHandler - associate procedure callbacks with files or devices
As shipped in IRIX 6.5. First release of 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