Читаем UNIX полностью

 return status;

}

<p>3.8.54 <code>timeout.c</code></p>

/* timeout: set time limit on a process */

#include

#include

int pid; /* child process id */

char *progname;

main(argc, argv)

 int argc;

 char *argv[];

{

 int sec = 10, status, onalarm();

 progname = argv[0];

 if (argc > 1 && argv[1][0] == '-') {

  sec = atoi(&argv[1][1]);

  argc--;

  argv++;

 }

 if (argc < 2)

  error("Usage: %s [-10] command", progname);

 if ((pid=fork()) == 0) {

  execvp(argv[1], &argv[1]);

  error("couldn't start %s", argv[1]);

 }

 signal(SIGALRM, onalarm);

 alarm(sec);

 if (wait(&status) == -1 || (status & 0177) != 0)

  error("%s killed", argv[1]);

 exit((status >> 8) & 0377);

}

onalarm() /* kill child when alarm arrives */

{

 kill(pid, SIGKILL);

}

#include "error.c"

<p>3.8.55 <code>toolong</code></p>

length($0) > 72 { print "Line", NR, "too long:", substr($0,1,60) }

<p>3.8.56 <code>ttyin1.c</code></p>

ttyin() /* process response from /dev/tty (version 1) */

{

 char buf[BUFSIZ];

 FILE *efopen();

 static FILE *tty = NULL;

 if (tty == NULL)

  tty = efopen("/dev/tty", "r");

 if (fgets(buf, BUFSIZ, tty) == NULL || buf[0] == 'q')

  exit(0);

 else /* ordinary line */

  return buf[0];

}

<p>3.8.57 <code>ttyin2.c</code></p>

ttyin() /* process response from /dev/tty (version 2) */

{

 char buf[BUFSIZ];

 FILE *efopen();

 static FILE *tty = NULL;

 if (tty == NULL)

  tty = efopen("/dev/tty", "r");

 for (;;) {

  if (fgets(buf,BUFSIZ,tty) == NULL || buf[0] == 'q')

  exit(0);

  else if (buf[0] == '!') {

   system(buf+1); /* BUG here */

   printf("!\n");

  }

  else /* ordinary line */

   return buf[0];

 }

}

#include "system.c"

<p>3.5.58 <code>vis1.c</code></p>

/* vis: make funny characters visible (version 1) */

#include

#include

main() {

 int c;

 while ((c = getchar()) != EOF)

  if (isascii(c) &&

   (isprint(c) || c=='\n' || c=='\t' || c==' '))

   putchar(c);

  else

   printf("\\%03o", c);

 exit(0);

}

<p>3.5.59 <code>vis2.c</code></p>

/* vis: make funny characters visible (version 2) */

#include

#include

main(argc, argv)

 int argc;

 char *argv[];

{

 int с, strip = 0;

 if (argc > 1 && strcmp(argv[1] , "-s") == 0)

  strip = 1;

 while ((c = getchar()) != EOF) if (isascii(c) &&

  (isprint(c) || c=='\n' || c=='\t' || c==' '))

  putchar(c);

 else if (!strip)

  printf("\\%03o", c);

 exit(0);

}

<p>3.8.60 <code>vis3.c</code></p>

/* vis: make funny characters visible (version 3) */

#include

#include

int strip = 0; /* 1 => discard special characters */

main(argc, argv)

 int argc;

 char *argv[];

{

 int i;

 FILE *fp;

 while (argc > 1 && argv[1][0] == '-') {

  switch (argv[1][1]) {

  case 's': /* -s: strip funny chars */

   strip = 1;

   break;

  default:

   fprintf(stderr, "%s: unknown arg %s\n",

    argv[0], argv[1]);

   exit(1);

  }

  argc--;

  argv++;

 }

 if (argc == 1)

  vis(stdin);

 for (i = 1; i < argc; i++)

  if ((fp=fopen(argv[i], "r")) == NULL) {

   fprintf(stderr, "%s: can't open %s\n",

    argv[0], argv[i]);

   exit(1);

Перейти на страницу:

Похожие книги