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

📄 time.c

📁 操作系统源代码
💻 C
字号:
/* time - time a command	Authors: Andy Tanenbaum & Michiel Huisjes */#include <sys/types.h>#include <sys/times.h>#include <limits.h>#include <time.h>#include <signal.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>#include <minix/minlib.h>#include <stdio.h>char **args;char *name;int digit_seen;char a[] = "12:34:56.78";_PROTOTYPE(int main, (int argc, char **argv));_PROTOTYPE(void print_time, (clock_t t));_PROTOTYPE(void twin, (int n, char *p));_PROTOTYPE(void execute, (void));int main(argc, argv)int argc;char *argv[];{  struct tms pre_buf, post_buf;  int status, pid;  time_t start_time, end_time;  if (argc == 1) exit(0);  args = &argv[1];  name = argv[1];  /* Get real time at start of run. */  (void) time(&start_time);  /* Fork off child. */  if ((pid = fork()) < 0) {	std_err("Cannot fork\n");	exit(1);  }  if (pid == 0) execute();  /* Parent is the time program.  Disable interrupts and wait. */  signal(SIGINT, SIG_IGN);  signal(SIGQUIT, SIG_IGN);  do {	times(&pre_buf);  } while (wait(&status) != pid);  (void) time(&end_time);  if ((status & 0377) != 0) std_err("Command terminated abnormally.\n");  times(&post_buf);  /* Print results.  -DNEW_TIME_FORMAT enables time on one line to 0.01 sec. */#ifndef NEW_TIME_FORMAT  std_err("real ");  print_time((clock_t) (end_time - start_time) * CLOCKS_PER_SEC);  std_err("\nuser ");  print_time(post_buf.tms_cutime - pre_buf.tms_cutime);  std_err("\nsys  ");  print_time(post_buf.tms_cstime - pre_buf.tms_cstime);  std_err("\n");#else  print_time((clock_t) (end_time - start_time) * CLOCKS_PER_SEC);  std_err(" real");  print_time(post_buf.tms_cutime - pre_buf.tms_cutime);  std_err(" user");  print_time(post_buf.tms_cstime - pre_buf.tms_cstime);  std_err(" sys\n");#endif  return((status & 0377) ? -1 : (status >> 8));}void print_time(t)register clock_t t;{/* Print the time 't' in hours: minutes: seconds.  't' is in ticks. */  int hours, minutes, seconds, hundredths, i;  digit_seen = 0;  for (i = 0; i < 8; i++) a[i] = ' ';  hours = (int) (t / ((clock_t) 3600 * CLOCKS_PER_SEC));  t -= (clock_t) hours * 3600 * CLOCKS_PER_SEC;  minutes = (int) (t / ((clock_t) 60 * CLOCKS_PER_SEC));  t -= (clock_t) minutes * 60 * CLOCKS_PER_SEC;  seconds = (int) (t / CLOCKS_PER_SEC);  t -= (clock_t) seconds * CLOCKS_PER_SEC;  hundredths = (int) (t * 100 / CLOCKS_PER_SEC);  if (hours) {	twin(hours, &a[0]);	a[2] = ':';  }  if (minutes || digit_seen) {	twin(minutes, &a[3]);	a[5] = ':';  }  if (seconds || digit_seen)	twin(seconds, &a[6]);  else	a[7] = '0';  a[9] = hundredths / 10 + '0';  a[10] = hundredths % 10 + '0';  std_err(a);}void twin(n, p)int n;char *p;{  char c1, c2;  c1 = (n / 10) + '0';  c2 = (n % 10) + '0';  if (digit_seen == 0 && c1 == '0') c1 = ' ';  *p++ = c1;  *p++ = c2;  if (n > 0) digit_seen = 1;}void execute(){  execvp(name, args);  std_err("Cannot execute ");  std_err(name);  std_err("\n");  exit(-1);}

⌨️ 快捷键说明

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