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

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)usleep.c 1.14 99/10/16 Copyright 1995 J. Schilling */
  2. #ifndef lint
  3. static char sccsid[] =
  4. "@(#)usleep.c 1.14 99/10/16 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. /*
  40.  * SCO has a usleep() prototype in unistd.h
  41.  * So we put this prototype before the #undef HAVE_USLEEP
  42.  */
  43. #ifndef HAVE_USLEEP
  44. EXPORT int usleep __PR((int usec));
  45. #endif
  46. #ifdef OPENSERVER
  47. /*
  48.  * Don't use the usleep() from libc on SCO's OPENSERVER.
  49.  * It will kill our processes with SIGALRM.
  50.  */
  51. #undef HAVE_USLEEP
  52. #endif
  53. #if !defined(HAVE_USLEEP)
  54. EXPORT int
  55. usleep(usec)
  56. int usec;
  57. {
  58. #if defined(HAVE_SELECT)
  59. #define HAVE_USLEEP
  60. struct timeval tv;
  61. tv.tv_sec = usec / 1000000;
  62. tv.tv_usec = usec % 1000000;
  63. select(0, 0, 0, 0, &tv);
  64. #endif
  65. #if defined(HAVE_POLL) && !defined(HAVE_USLEEP)
  66. #define HAVE_USLEEP
  67. if (poll(0, 0, usec/1000) < 0)
  68. comerr("poll delay failed.n");
  69. #endif
  70. #if defined(HAVE_NANOSLEEP) && !defined(HAVE_USLEEP)
  71. #define HAVE_USLEEP
  72. struct timespec ts;
  73. ts.tv_sec = usec / 1000000;
  74. ts.tv_nsec = (usec % 1000000) * 1000;
  75. nanosleep(&ts, 0);
  76. #endif
  77. #if !defined(HAVE_USLEEP)
  78. #define HAVE_USLEEP
  79. sleep((usec+500000)/1000000);
  80. #endif
  81. return (0);
  82. }
  83. #endif