/src/ftk_pipe_socket.c

http://ftk.googlecode.com/ · C · 103 lines · 54 code · 20 blank · 29 comment · 12 complexity · 8e8cf7a3772b3b9cf5ac6f9ba0e2959c MD5 · raw file

  1. /*
  2. * File: ftk_pipe.c
  3. * Author: Li XianJing <xianjimli@hotmail.com>
  4. * Brief: pipe
  5. *
  6. * Copyright (c) 2009 - 2010 Li XianJing <xianjimli@hotmail.com>
  7. *
  8. * Licensed under the Academic Free License version 2.1
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License as published by
  12. * the Free Software Foundation; either version 2 of the License, or
  13. * (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public License
  21. * along with this program; if not, write to the Free Software
  22. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  23. */
  24. /*
  25. * History:
  26. * ================================================================
  27. * 2010-01-20 Li XianJing <xianjimli@hotmail.com> created
  28. *
  29. */
  30. #include "ftk_log.h"
  31. #include "ftk_pipe.h"
  32. #include "ftk_allocator.h"
  33. struct _FtkPipe
  34. {
  35. int read_fd;
  36. int write_fd;
  37. };
  38. static Ret make_sock_pipe(int pipes[2])
  39. {
  40. int pipe_ret = 0;
  41. pipe_ret = ftk_pipe_pair(pipes);
  42. return pipe_ret ? RET_FAIL : RET_OK;
  43. }
  44. FtkPipe* ftk_pipe_create(void)
  45. {
  46. int pipes[2] = {0};
  47. FtkPipe* thiz = FTK_NEW(FtkPipe);
  48. if(thiz != NULL)
  49. {
  50. make_sock_pipe(pipes);
  51. thiz->read_fd = pipes[0];
  52. thiz->write_fd = pipes[1];
  53. }
  54. return thiz;
  55. }
  56. int ftk_pipe_read(FtkPipe* thiz, void* buff, size_t length)
  57. {
  58. return_val_if_fail(thiz != NULL && buff != NULL, -1);
  59. return ftk_pipe_recv(thiz->read_fd, buff, length);
  60. }
  61. int ftk_pipe_write(FtkPipe* thiz, const void* buff, size_t length)
  62. {
  63. return_val_if_fail(thiz != NULL && buff != NULL, -1);
  64. return ftk_pipe_send(thiz->write_fd, buff, length);
  65. }
  66. int ftk_pipe_get_read_handle(FtkPipe* thiz)
  67. {
  68. return thiz != NULL ? thiz->read_fd : -1;
  69. }
  70. int ftk_pipe_get_write_handle(FtkPipe* thiz)
  71. {
  72. return thiz != NULL ? thiz->write_fd : -1;
  73. }
  74. void ftk_pipe_destroy(FtkPipe* thiz)
  75. {
  76. if(thiz != NULL)
  77. {
  78. ftk_pipe_close(thiz->read_fd);
  79. ftk_pipe_close(thiz->write_fd);
  80. FTK_ZFREE(thiz, sizeof(*thiz));
  81. }
  82. return;
  83. }