Читаем UNIX — универсальная среда программирования полностью

 progname = argv[0];

 if ((name = getlogin) == NULL)

  error("can't get login name", (char*)0);

 if (chdir(maildir) == -1)

  error("can't cd to %s", maildir);

 for (;;) {

  if (stat(name, buf) == -1) /* no mailbox */

   buf.st_size = 0;

  if (buf.st_size lastsize)

   fprintf(stderr, "\nYou have mail\007\n");

  lastsize = buf.st_size;

  sleep(60);

 }

}

#include "error.c"

<p>3.8.13 <code>checkmail.sh</code></p>

# checkmail: watch mailbox for growth

PATH=/bin:/usr/bin

MAIL=/usr/spool/mail/`getname` # system dependent

t=${1-60}

x="`ls -l $MAIL`"

while :

do

 y="`ls -l $MAIL`"

 echo $x $y x="$y"

 sleep $t

done | awk '$4 $12 { print "You have mail" }'

<p>3.8.14 <code>cp.c</code></p>

/* cp: minimal version */

#include stdio.h

#define PERMS 0644 /* RW for owner, R for group, others */

char *progname;

main(argc, argv) /* cp: copy f1 to f2 */

 int argc;

 char *argv[];

{

 char buf[BUFSIZ];

 progname = argv[0];

 if (argc != 3)

  error("Usage: %s from to", progname);

 if ((f1 = open(argv[1], 0)) == -1)

  error("can't open %s", argv[1]);

 if ((f2 = creat(argv[2] , PERMS)) == -1)

  error("can't create %s", argv[2]);

 while ((n = read(f1, buf, BUFSIZ)) 0)

  if (write(f2, buf, n) != n)

   error("write error", (char*)0);

 exit(0);

}

#include "error.c"

<p>3.8.15 <code>doctype</code></p>

# doctype: synthesize proper command line for troff

echo -n "cat $* | "

egrep -h '^\.(EQ|TS|\[|PS|IS|PP)' $* |

sort -u | awk '

/^\.PP/ { ms++ }

/^\.EQ/ { eqn++ }

/^\.TS/ { tbl++ }

/^\.PS/ { pic++ }

/^\.IS/ { ideal++ }

/^\.\[/ { refer++ }

END {

 if (refer 0) printf "refer | "

 if (pic 0) printf "pic | "

 if (ideal 0) printf "ideal | "

 if (tbl 0) printf "tbl | "

 if (eqn 0) printf "eqn | "

 printf "troff "

 if (ms 0) printf "-ms"

 printf "\n"

}'

<p>3.8.16 <code>double</code></p>

awk '

FILENAME != prevfile { # new file

 NR = 1                # reset line number

 prevfile = FILENAME

}

NF 0 {

 if ($1 == lastword)

  printf "double %s, file %s, line %d\n" ,$1,FILENAME,NR

 for (i = 2; i = NF; i++)

  if ($i == $(i-1))

   printf "double %s, file %s, line %d\n" ,$i, FILENAME ,NR

 if (NF 0)

  lastword = $NF

}' $*

<p>3.8.17 <code>efopen.c</code></p>

FILE *efopen(file, mode) /* fopen file, die if can't */

 char *file, *mode;

{

 FILE *fp, *fopen;

 extern char *progname;

 if ((fp = fopen(file, mode)) != NULL)

  return fp;

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

  progname, file, mode);

 exit(1);

}

<p>3.8.18 <code>error.c</code></p>

error(s1, s2) /* print error message and die */

 char *s1, *s2;

{

 extern int errno, sys_nerr;

 extern char *sys_errlist[], *progname;

 if (progname)

  fprintf(stderr, "%s: ", progname);

 fprintf(stderr, s1, s2);

 if (errno 0 errno sys_nerr)

  fprintf (stderr, " (%s)", sys_errlist[errno]);

 fprintf(stderr, "\n");

 exit(1);

}

<p>3.8.19 <code>field1</code></p>

awk '{ print $'$1' }'

<p>3.8.20 <code>field2</code></p>
Перейти на страницу:

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT