⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sleep.c

📁 UNIX下SH的实现源码
💻 C
字号:
/* * sleep -- sleep for fractions of a second * * usage: sleep seconds[.fraction] */#include "config.h"#include "bashtypes.h"#if defined (TIME_WITH_SYS_TIME)#  include <sys/time.h>#  include <time.h>#else#  if defined (HAVE_SYS_TIME_H)#    include <sys/time.h>#  else#    include <time.h>#  endif#endif#if defined (HAVE_UNISTD_H)#include <unistd.h>#endif#include <stdio.h>#include "shell.h"#include "builtins.h"#define RETURN(x) \	do { \		if (sp) *sp = sec; \		if (usp) *usp = usec; \		return (x); \	} while (0)#if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)static intfsleep(sec, usec)long	sec, usec;{	struct timeval tv;	tv.tv_sec = sec;	tv.tv_usec = usec;	return select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &tv);}#else /* !HAVE_TIMEVAL || !HAVE_SELECT */static intfsleep(sec, usec)long	sec, usec;{	if (usec >= 500000)	/* round */		sec++;	return (sleep(sec));}#endif /* !HAVE_TIMEVAL || !HAVE_SELECT *//* * An incredibly simplistic floating point converter. */static int multiplier[7] = { 1, 100000, 10000, 1000, 100, 10, 1 };static intconvert(s, sp, usp)char	*s;long	*sp, *usp;{	int n;	long sec, usec;	char	*p;	sec = usec = 0;#define DECIMAL	'.'	for (p = s; p && *p; p++) {		if (*p == DECIMAL)		/* decimal point */			break;		if (isdigit(*p) == 0)			RETURN(0);		sec = (sec * 10) + (*p - '0');	}	if (*p == 0)		RETURN(1);	if (*p == DECIMAL)		p++;	/* Look for up to six digits past a decimal point. */	for (n = 0; n < 6 && p[n]; n++) {		if (isdigit(p[n]) == 0)			RETURN(0);		usec = (usec * 10) + (p[n] - '0');	}	/* Now convert to millionths */	usec *= multiplier[n];	if (n == 6 && p[6] && isdigit(p[6]) && p[6] >= '5')			usec++;			/* round up 1 */	RETURN(1);}intsleep_builtin (list)WORD_LIST	*list;{	long	sec, usec;	if (list == 0) {		builtin_usage();		return(EX_USAGE);	}	if (*list->word->word == '-' || list->next) {		builtin_usage ();		return (EX_USAGE);	}    	if (convert(list->word->word, &sec, &usec)) {		fsleep(sec, usec);		return(EXECUTION_SUCCESS);    	}	builtin_error("%s: bad sleep interval", list->word->word);	return (EXECUTION_FAILURE);}static char *sleep_doc[] = {	"sleep suspends execution for a minimum of SECONDS[.FRACTION] seconds.",	(char *)NULL};struct builtin sleep_struct = {	"sleep",	sleep_builtin,	BUILTIN_ENABLED,	sleep_doc,	"sleep seconds[.fraction]",	0};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -