xref: /minix/minix/lib/libasyn/asynchio.h (revision 83133719)
1 /*	asynchio.h - Asynchronous I/O			Author: Kees J. Bot
2  *								7 Jul 1997
3  * Minix-vmd compatible asynchio(3) using BSD select(2).
4  */
5 #ifndef _SYS__ASYNCHIO_H
6 #define _SYS__ASYNCHIO_H
7 
8 #include <sys/select.h>			/* for FD_SETSIZE */
9 
10 #define SEL_READ	0		/* Code for a read. */
11 #define SEL_WRITE	1		/* Code for a write. */
12 #define SEL_EXCEPT	2		/* Code for some exception. */
13 #define SEL_NR		3		/* Number of codes. */
14 
15 struct _asynfd {
16 	int		afd_seen;	/* Set if we manage this descriptor. */
17 	int		afd_flags;	/* File flags by fcntl(fd, F_GETFL). */
18 	int		afd_state[SEL_NR];  /* Operation state. */
19 };
20 
21 typedef struct {
22 	int		asyn_more;	/* Set if more to do before blocking. */
23 	struct _asynfd	asyn_afd[FD_SETSIZE];
24 	fd_set		asyn_fdset[SEL_NR];	/* Select() fd sets. */
25 } asynchio_t;
26 
27 #define ASYN_INPROGRESS	EAGAIN		/* Errno code telling "nothing yet." */
28 #define ASYN_NONBLOCK	0x01		/* If asyn_wait() mustn't block. */
29 
30 struct timeval;
31 
32 void asyn_init(asynchio_t *_asyn);
33 ssize_t asyn_read(asynchio_t *_asyn, int _fd, void *_buf, size_t _len);
34 ssize_t asyn_write(asynchio_t *_asyn, int _fd, const void *_buf, size_t _len);
35 int asyn_special(asynchio_t *_asyn, int _fd, int _op);
36 int asyn_result(asynchio_t *_asyn, int _fd, int _op, int _result);
37 int asyn_wait(asynchio_t *_asyn, int _flags, struct timeval *to);
38 int asyn_cancel(asynchio_t *_asyn, int _fd, int _op);
39 int asyn_pending(asynchio_t *_asyn, int _fd, int _op);
40 int asyn_synch(asynchio_t *_asyn, int _fd);
41 int asyn_close(asynchio_t *_asyn, int _fd);
42 
43 #endif /* _SYS__ASYNCHIO_H */
44