任务一、echo
程序源代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { int nflag; if (*++argv &&
!strcmp(*argv, "-n")) { ++argv; nflag = 1; } else nflag = 0; while (*argv) { printf("%s", *argv); if (*++argv) putchar('
'); } if (!nflag) putchar('\n'); exit(0); |
任务要求:
此程序是Unix下的命令echo实现的源代码(做了适当的删减和修饰)。
请用结构化流程图画出这个程序main函数里的执行过程。
任务二、sleep
程序源代码:
#include <sys/time.h> #include <time.h> #include <ctype.h> #include <math.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <locale.h> void usage() { (void)fprintf(stderr, "usage: sleep
seconds\n"); exit(1); void alarmhandle() { _exit(0); int main(int argc, char *argv[]) { char *arg,
*temp; double val, ival,
fval; struct timespec
ntime; int fracflag; int ch; setlocale(LC_ALL, ""); (void)signal(SIGALRM,
alarmhandle); while ((ch =
getopt(argc, argv, "")) != -1) switch(ch) case '?': default: usage(); } argc -= optind; argv += optind; if (argc != 1) usage(); fracflag = 0; arg = *argv; for (temp = arg; *temp
!= '\0'; temp++) if (!isdigit(*temp)) fracflag++; if (fracflag) { val = atof(arg); if (val <= 0) exit(0); ival = floor(val); fval = (1000000000 * (val-ival)); ntime.tv_sec = ival; ntime.tv_nsec = fval; } else ntime.tv_sec = atol(arg); if (ntime.tv_sec <= 0) exit(0); ntime.tv_nsec = 0; } (void)nanosleep(&ntime, NULL); exit(0); |
要求:
此程序是Unix下的命令sleep实现的源代码(做了适当的删减和修饰)。
请用结构化流程图画出这个程序main函数里的执行过程。