Subversion Repositories shark

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 pj 1
/*
2
 *   xfermem.h
3
 *
4
 *   Oliver Fromme  <oliver.fromme@heim3.tu-clausthal.de>
5
 *   Sat Mar 29 04:41:34 MET 1997
6
 *
7
 *   This is a stand-alone module which implements a unidirectional,
8
 *   fast pipe using mmap().  Its primary use is to transfer large
9
 *   amounts of data from a parent process to its child process,
10
 *   with a buffer in between which decouples blocking conditions
11
 *   on both sides.  Control information is transferred between the
12
 *   processes through a socketpair.  See xftest.c for an example on
13
 *   how to use this module.
14
 */
15
 
16
#ifndef TRUE
17
#define FALSE 0
18
#define TRUE  1
19
#endif
20
 
21
typedef unsigned char byte;
22
 
23
typedef struct {
24
        int freeindex;  /* [W] next free index */
25
        int readindex;  /* [R] next index to read */
26
        int fd[2];
27
        int wakeme[2];
28
        byte *data;
29
        byte *metadata;
30
        int size;
31
        int metasize;
32
} txfermem;
33
/*
34
 *   [W] -- May be written to by the writing process only!
35
 *   [R] -- May be written to by the reading process only!
36
 *   All other entries are initialized once.
37
 */
38
 
39
void xfermem_init (txfermem **xf, int bufsize, int msize);
40
void xfermem_init_writer (txfermem *xf);
41
void xfermem_init_reader (txfermem *xf);
42
 
43
int  xfermem_write (txfermem *xf, byte *data, int count);
44
int  xfermem_read  (txfermem *xf, byte *data, int count);
45
 
46
int xfermem_get_freespace (txfermem *xf);
47
int xfermem_get_usedspace (txfermem *xf);
48
#define XF_CMD_WAKEUP    0x02
49
#define XF_CMD_TERMINATE 0x03
50
#define XF_WRITER 0
51
#define XF_READER 1
52
int xfermem_getcmd (int fd, int block);
53
int xfermem_putcmd (int fd, byte cmd);
54
int xfermem_block (int fd, txfermem *xf);
55
 
56
void xfermem_done (txfermem *xf);
57
#define xfermem_done_writer xfermem_init_reader
58
#define xfermem_done_reader xfermem_init_writer
59
 
60
/* EOF */