Date: Sat, 26 Jul 1997 12:29:07 -0700 (PDT) From: FreeBSD Technical Reader <kernel@acromail.ml.org> To: denny1@home.com Cc: freebsd-gnats-submit@FreeBSD.ORG, GNATS Management <gnats@FreeBSD.ORG>, freebsd-bugs@hub.freebsd.org Subject: Re: bin/4154: wish /bin/sleep handled fractions of a second. Message-ID: <Pine.BSF.3.96.970726122750.9794B-100000@acromail.ml.org> In-Reply-To: <199707240518.WAA09252@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Wouldn't you want to use usleep() for that only thing is that I think that
is good only about to 0.02 seconds generally unless you change HZ which
messes up some other things (I wonder if these would be fixed by a make
world)
On Wed, 23 Jul 1997 denny1@home.com wrote:
>
> >Number: 4154
> >Category: bin
> >Synopsis: wish /bin/sleep handled fractions of a second.
> >Confidential: no
> >Severity: non-critical
> >Priority: low
> >Responsible: freebsd-bugs
> >State: open
> >Class: change-request
> >Submitter-Id: current-users
> >Arrival-Date: Wed Jul 23 22:20:01 PDT 1997
> >Last-Modified:
> >Originator: Denny Gentry
> >Organization:
> >Release: N/A
> >Environment:
> Fix was developed on OpenBSD.
> >Description:
> I have often wished /bin/sleep could sleep for less than one second,
> in the inner loop of a script which I want to slow down slightly.
> Such a feature would be an extension to POSIX, which deals only
> with full seconds.
> This has been implemented in OpenBSD. The crucial portion of the
> code I submitted there has been pasted below. It would be nice to
> get such an extension adopted more widely in *BSD, so portable scripts
> could use it.
> >How-To-Repeat:
> /bin/sleep 0.5
> wish it worked the way you want.
> >Fix:
> /* $OpenBSD: sleep.c,v 1.6 1997/06/29 08:09:21 denny Exp $ */
>
> cp = *argv;
> while ((*cp != '\0') && (*cp != '.')) {
> if (!isdigit(*cp)) usage();
> secs = (secs * 10) + (*cp++ - '0');
> }
>
> /* Handle fractions of a second */
> if (*cp == '.') {
> *cp++ = '\0';
> for (i = 100000000; i > 0; i /= 10) {
> if (*cp == '\0') break;
> if (!isdigit(*cp)) usage();
> nsecs += (*cp++ - '0') * i;
> }
> }
>
> rqtp.tv_sec = (time_t) secs;
> rqtp.tv_nsec = nsecs;
>
> if ((secs > 0) || (nsecs > 0))
> (void)nanosleep(&rqtp, NULL);
> >Audit-Trail:
> >Unformatted:
>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.970726122750.9794B-100000>
