usleep.c
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)usleep.c 1.13 99/08/30 Copyright 1995 J. Schilling */
  2. #ifndef lint
  3. static char sccsid[] =
  4. "@(#)usleep.c 1.13 99/08/30 Copyright 1995 J. Schilling";
  5. #endif
  6. /*
  7.  * Copyright (c) 1995 J. Schilling
  8.  */
  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, or (at your option)
  13.  * 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; see the file COPYING.  If not, write to
  22.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  */
  24. #include <mconfig.h>
  25. #include <standard.h>
  26. #include <stdxlib.h>
  27. #include <timedefs.h>
  28. #ifdef HAVE_POLL_H
  29. # include <poll.h>
  30. #else
  31. # ifdef HAVE_SYS_POLL_H
  32. # include <sys/poll.h>
  33. # endif
  34. #endif
  35. #ifdef HAVE_SYS_SYSTEMINFO_H
  36. #include <sys/systeminfo.h>
  37. #endif
  38. #include <libport.h>
  39. #ifdef OPENSERVER
  40. /*
  41.  * Don't use the usleep() from libc on SCO's OPENSERVER.
  42.  * It will kill our processes with SIGALRM.
  43.  */
  44. #undef HAVE_USLEEP
  45. #endif
  46. #ifndef HAVE_USLEEP
  47. EXPORT int usleep __PR((int usec));
  48. #endif
  49. #if !defined(HAVE_USLEEP)
  50. EXPORT int
  51. usleep(usec)
  52. int usec;
  53. {
  54. #if defined(HAVE_SELECT)
  55. #define HAVE_USLEEP
  56. struct timeval tv;
  57. tv.tv_sec = usec / 1000000;
  58. tv.tv_usec = usec % 1000000;
  59. select(0, 0, 0, 0, &tv);
  60. #endif
  61. #if defined(HAVE_POLL) && !defined(HAVE_USLEEP)
  62. #define HAVE_USLEEP
  63. if (poll(0, 0, usec/1000) < 0)
  64. comerr("poll delay failed.n");
  65. #endif
  66. #if defined(HAVE_NANOSLEEP) && !defined(HAVE_USLEEP)
  67. #define HAVE_USLEEP
  68. struct timespec ts;
  69. ts.tv_sec = usec / 1000000;
  70. ts.tv_nsec = (usec % 1000000) * 1000;
  71. nanosleep(&ts, 0);
  72. #endif
  73. #if !defined(HAVE_USLEEP)
  74. #define HAVE_USLEEP
  75. sleep((usec+500000)/1000000);
  76. #endif
  77. return (0);
  78. }
  79. #endif