os_fsync.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: os_fsync.c,v 11.14 2002/07/12 18:56:50 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <fcntl.h> /* XXX: Required by __hp3000s900 */
  14. #include <unistd.h>
  15. #include <string.h>
  16. #endif
  17. #include "db_int.h"
  18. #ifdef HAVE_VXWORKS
  19. #include "ioLib.h"
  20. #define fsync(fd) __vx_fsync(fd);
  21. int
  22. __vx_fsync(fd)
  23. int fd;
  24. {
  25. int ret;
  26. /*
  27.  * The results of ioctl are driver dependent.  Some will return the
  28.  * number of bytes sync'ed.  Only if it returns 'ERROR' should we
  29.  * flag it.
  30.  */
  31. if ((ret = ioctl(fd, FIOSYNC, 0)) != ERROR)
  32. return (0);
  33. return (ret);
  34. }
  35. #endif
  36. #ifdef __hp3000s900
  37. #define fsync(fd) __mpe_fsync(fd);
  38. int
  39. __mpe_fsync(fd)
  40. int fd;
  41. {
  42. extern FCONTROL(short, short, void *);
  43. FCONTROL(_MPE_FILENO(fd), 2, NULL); /* Flush the buffers */
  44. FCONTROL(_MPE_FILENO(fd), 6, NULL); /* Write the EOF */
  45. return (0);
  46. }
  47. #endif
  48. /*
  49.  * __os_fsync --
  50.  * Flush a file descriptor.
  51.  *
  52.  * PUBLIC: int __os_fsync __P((DB_ENV *, DB_FH *));
  53.  */
  54. int
  55. __os_fsync(dbenv, fhp)
  56. DB_ENV *dbenv;
  57. DB_FH *fhp;
  58. {
  59. int ret;
  60. /*
  61.  * Do nothing if the file descriptor has been marked as not requiring
  62.  * any sync to disk.
  63.  */
  64. if (F_ISSET(fhp, DB_FH_NOSYNC))
  65. return (0);
  66. do {
  67. ret = DB_GLOBAL(j_fsync) != NULL ?
  68.     DB_GLOBAL(j_fsync)(fhp->fd) : fsync(fhp->fd);
  69. } while (ret != 0 && (ret = __os_get_errno()) == EINTR);
  70. if (ret != 0)
  71. __db_err(dbenv, "fsync %s", strerror(ret));
  72. return (ret);
  73. }