Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jul 1997 22:18:35 -0700 (PDT)
From:      denny1@home.com
To:        freebsd-gnats-submit@FreeBSD.ORG
Subject:   bin/4154: wish /bin/sleep handled fractions of a second.
Message-ID:  <199707240518.WAA09252@hub.freebsd.org>
Resent-Message-ID: <199707240520.WAA09344@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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?199707240518.WAA09252>