Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct buffer
  4. {
  5. int begin, end, size;
  6. char *buf;
  7. };
  8. typedef struct buffer buffer;
  9. buffer* create_buffer(int size)
  10. {
  11. buffer *b = calloc(1, sizeof(*b));
  12. b->begin = b->end = 0;
  13. b->size = size;
  14. b->buf = calloc(size, sizeof(b->buf[0]));
  15. return b;
  16. }
  17. int write_buffer(buffer *b, void *data, int size)
  18. {
  19. char *d = (char *)data;
  20. int i;
  21. for (i = 0; i < size && b->begin != (b->end + 1) % b->size; ++i)
  22. {
  23. b->buf[b->end] = d[i];
  24. b->end = (b->end + 1) % b->size;
  25. }
  26. return i;
  27. }
  28. int read_buffer(buffer *b, void *data, int size)
  29. {
  30. char *d = (char *)data;
  31. int i;
  32. for (i = 0; i < size && b->begin != b->end; ++i)
  33. {
  34. d[i] = b->buf[b->begin];
  35. b->begin = (b->begin + 1) % b->size;
  36. }
  37. return i;
  38. }
  39. int main(void)
  40. {
  41. buffer* b = create_buffer(40);
  42. for (char i = 0; i <= 10; ++i)
  43. write_buffer(b, &i, sizeof(i));
  44. int p;
  45. while (read_buffer(b, &p, sizeof(p)) == sizeof(p))
  46. {
  47. printf("%d ", (short)p);
  48. write_buffer(b, &p, sizeof(short));
  49. }
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement