locklockf.c
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:1k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. /* $Id: locklockf.c,v 1.3 1999/12/06 13:18:55 mrsam Exp $ */
  6. #if HAVE_CONFIG_H
  7. #include "config.h"
  8. #endif
  9. #include <sys/types.h>
  10. #if HAVE_FCNTL_H
  11. #include <fcntl.h>
  12. #endif
  13. #if HAVE_SYS_FCNTL_H
  14. #include <sys/fcntl.h>
  15. #endif
  16. #if HAVE_UNISTD_H
  17. #include <unistd.h>
  18. #endif
  19. #if HAVE_ERRNO_H
  20. #include <errno.h>
  21. #endif
  22. #include "liblock.h"
  23. int ll_lockfd(int fd, int ltype, LL_OFFSET_TYPE start, LL_OFFSET_TYPE len)
  24. {
  25. off_t p;
  26. if (!(ltype & ll_writelock))
  27. {
  28. errno=EINVAL;
  29. return (-1);
  30. }
  31. if (ltype & ll_whence_curpos)
  32. p=lseek(fd, start, SEEK_CUR);
  33. else if (ltype && ll_whence_end)
  34. p=lseek(fd, start, SEEK_END);
  35. else p=lseek(fd, start, SEEK_SET);
  36. if (p < 0) return (-1);
  37. if (lockf(fd, ltype & ll_unlock ? F_ULOCK:
  38. ltype & ll_wait ? F_LOCK:F_TLOCK, len))
  39. {
  40. lseek(fd, p, SEEK_SET);
  41. return (-1);
  42. }
  43. lseek(fd, SEEK_SET, p);
  44. return (0);
  45. }