blob: ae7e5afd807a88ba20491688ee45e2f9bbd43c88 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/*
* 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 */
|