time.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 102 行

C
102
字号
#include <u.h>#include <libc.h>char	output[4096];void	add(char*, ...);void	error(char*);void	notifyf(void*, char*);voidmain(int argc, char *argv[]){	int i;	Waitmsg *w;	long l;	char *p;	char err[ERRMAX];	if(argc <= 1){		fprint(2, "usage: time command\n");		exits("usage");	}	switch(fork()){	case -1:		error("fork");	case 0:		exec(argv[1], &argv[1]);		if(argv[1][0] != '/' && strncmp(argv[1], "./", 2) &&		   strncmp(argv[1], "../", 3)){			sprint(output, "/bin/%s", argv[1]);			exec(output, &argv[1]);		}		error(argv[1]);	}	notify(notifyf);    loop:	w = wait();	if(w == nil){		errstr(err, sizeof err);		if(strcmp(err, "interrupted") == 0)			goto loop;		error("wait");	}	l = w->time[0];	add("%ld.%.2ldu", l/1000, (l%1000)/10);	l = w->time[1];	add("%ld.%.2lds", l/1000, (l%1000)/10);	l = w->time[2];	add("%ld.%.2ldr", l/1000, (l%1000)/10);	add("\t");	for(i=1; i<argc; i++){		add("%s", argv[i], 0);		if(i>4){			add("...");			break;		}	}	if(w->msg[0]){		p = utfrune(w->msg, ':');		if(p && p[1])			p++;		else			p = w->msg;		add(" # status=%s", p);	}	fprint(2, "%s\n", output);	exits(w->msg);}voidadd(char *a, ...){	static beenhere=0;	va_list arg;	if(beenhere)		strcat(output, " ");	va_start(arg, a);	vseprint(output+strlen(output), output+sizeof(output), a, arg);	va_end(arg);	beenhere++;}voiderror(char *s){	fprint(2, "time: %s: %r\n", s);	exits(s);}voidnotifyf(void *a, char *s){	USED(a);	if(strcmp(s, "interrupt") == 0)		noted(NCONT);	noted(NDFLT);}

⌨️ 快捷键说明

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