任务一、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函数里的执行过程