beard.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * beard.c
  4.  *   sample routines to use large objects
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/tutorial/beard.c,v 1.2 1999/02/13 23:22:47 momjian Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. typedef struct ImageHdr
  15. {
  16. int size;
  17. } ImageHdr;
  18. #define BUFSIZE 10
  19. /*
  20.  * beard -
  21.  *  clips lower 1/3 of picture and return as large object
  22.  */
  23. Oid
  24. beard(Oid picture)
  25. {
  26. Oid beard;
  27. int pic_fd,
  28. beard_fd;
  29. ImageHdr ihdr;
  30. char buf[BUFSIZE];
  31. int cc;
  32. if ((pic_fd = lo_open(picture, INV_READ)) == -1)
  33. elog(ERROR, "Cannot access picture large object");
  34. if (lo_read(pic_fd, (char *) &ihdr, sizeof(ihdr)) != sizeof(ihdr))
  35. elog(ERROR, "Picture large object corrupted");
  36. beardOffset = (ihdr.size / 3) * 2;
  37. /*
  38.  * new large object
  39.  */
  40. if ((beard = lo_creat(INV_MD)) == 0) /* ?? is this right? */
  41. elog(ERROR, "Cannot create new large object");
  42. if ((beard_fd = lo_open(beard, INV_WRITE)) == -1)
  43. elog(ERROR, "Cannot access beard large object");
  44. lo_lseek(pic_fd, beardOffset, SET_CUR);
  45. while ((cc = lo_read(pic_fd, buf, BUFSIZE)) > 0)
  46. {
  47. if (lo_write(beard_fd, buf, cc) != cc)
  48. elog(ERROR, "error while writing large object");
  49. }
  50. lo_close(pic_fd);
  51. lo_close(beard_fd);
  52. return beard;
  53. }