123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * xfermem.h
- *
- * Oliver Fromme <oliver.fromme@heim3.tu-clausthal.de>
- * Sat Mar 29 04:41:34 MET 1997
- *
- * This is a stand-alone module which implements a unidirectional,
- * fast pipe using mmap(). Its primary use is to transfer large
- * amounts of data from a parent process to its child process,
- * with a buffer in between which decouples blocking conditions
- * on both sides. Control information is transferred between the
- * processes through a socketpair. See xftest.c for an example on
- * how to use this module.
- */
- #ifndef TRUE
- #define FALSE 0
- #define TRUE 1
- #endif
- typedef struct {
- int freeindex; /* [W] next free index */
- int readindex; /* [R] next index to read */
- int fd[2];
- int wakeme[2];
- byte *data;
- byte *metadata;
- int size;
- int metasize;
- int buf[3];
- } txfermem;
- /*
- * [W] -- May be written to by the writing process only!
- * [R] -- May be written to by the reading process only!
- * All other entries are initialized once.
- */
- void xfermem_init (txfermem **xf, int bufsize, int msize,int skipbuf);
- void xfermem_init_writer (txfermem *xf);
- void xfermem_init_reader (txfermem *xf);
- int xfermem_write (txfermem *xf, byte *data, int count);
- int xfermem_read (txfermem *xf, byte *data, int count);
- int xfermem_get_freespace (txfermem *xf);
- int xfermem_get_usedspace (txfermem *xf);
- #define XF_CMD_WAKEUP_INFO 0x04
- #define XF_CMD_WAKEUP 0x02
- #define XF_CMD_TERMINATE 0x03
- #define XF_WRITER 0
- #define XF_READER 1
- int xfermem_getcmd (int fd, int block);
- int xfermem_putcmd (int fd, byte cmd);
- int xfermem_block (int fd, txfermem *xf);
- void xfermem_done (txfermem *xf);
- #define xfermem_done_writer xfermem_init_reader
- #define xfermem_done_reader xfermem_init_writer
- /* EOF */
|