time.c

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

C
52
字号
#include <u.h>#include <libc.h>/* *  After a fork with fd's copied, both fd's are pointing to *  the same Chan structure.  Since the offset is kept in the Chan *  structure, the seek's and read's in the two processes can *  compete at moving the offset around.  Hence the unusual loop *  in the middle of this routine. */static longoldtime(long *tp){	char b[20];	static int f = -1;	int i, retries;	long t;	memset(b, 0, sizeof(b));	for(retries = 0; retries < 100; retries++){		if(f < 0)			f = open("/dev/time", OREAD|OCEXEC);		if(f < 0)			break;		if(seek(f, 0, 0) < 0 || (i = read(f, b, sizeof(b))) < 0){			close(f);			f = -1;		} else {			if(i != 0)				break;		}	}	t = atol(b);	if(tp)		*tp = t;	return t;}longtime(long *tp){	vlong t;	t = nsec()/((vlong)1000000000);	if(t == 0)		t = oldtime(0);	if(tp != nil)		*tp = t;	return t;}

⌨️ 快捷键说明

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