xfermem.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. #ifndef TRUE
  16. #define FALSE 0
  17. #define TRUE 1
  18. #endif
  19. typedef struct {
  20. int freeindex; /* [W] next free index */
  21. int readindex; /* [R] next index to read */
  22. int fd[2];
  23. int wakeme[2];
  24. byte *data;
  25. byte *metadata;
  26. int size;
  27. int metasize;
  28. int buf[3];
  29. } txfermem;
  30. /*
  31. * [W] -- May be written to by the writing process only!
  32. * [R] -- May be written to by the reading process only!
  33. * All other entries are initialized once.
  34. */
  35. void xfermem_init (txfermem **xf, int bufsize, int msize,int skipbuf);
  36. void xfermem_init_writer (txfermem *xf);
  37. void xfermem_init_reader (txfermem *xf);
  38. int xfermem_write (txfermem *xf, byte *data, int count);
  39. int xfermem_read (txfermem *xf, byte *data, int count);
  40. int xfermem_get_freespace (txfermem *xf);
  41. int xfermem_get_usedspace (txfermem *xf);
  42. #define XF_CMD_WAKEUP_INFO 0x04
  43. #define XF_CMD_WAKEUP 0x02
  44. #define XF_CMD_TERMINATE 0x03
  45. #define XF_WRITER 0
  46. #define XF_READER 1
  47. int xfermem_getcmd (int fd, int block);
  48. int xfermem_putcmd (int fd, byte cmd);
  49. int xfermem_block (int fd, txfermem *xf);
  50. void xfermem_done (txfermem *xf);
  51. #define xfermem_done_writer xfermem_init_reader
  52. #define xfermem_done_reader xfermem_init_writer
  53. /* EOF */