任务一、echo
程序源代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) int nflag; if (*++argv && { ++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 exit(1); } void alarmhandle() _exit(0); } int main(int argc, char *argv[]) char *arg, double val, ival, struct timespec int fracflag; int ch; setlocale(LC_ALL, ""); (void)signal(SIGALRM, while ((ch = switch(ch) case ‘?‘: default: usage(); } argc -= optind; argv += optind; if (argc != 1) usage(); fracflag = 0; arg = *argv; for (temp = arg; *temp if (!isdigit(*temp)) 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函数里的执行过程。