Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ срСда программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 59

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

/* checkmail: watch user's mailbox */

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>


char *progname;

char *maildir = "/usr/spool/mail"; /* system dependent */


main(argc, argv)

 int argc;

 char *argv[];

{

 struct stat buf;

 char *name, *getlogin();

 int lastsize = 0;


 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);

 }

}

Ѐункция getlogin(3) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ вашС рСгистрационноС имя ΠΈΠ»ΠΈ NULL, Ссли это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, checkmail ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° chdir, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ stat Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ "Π΄ΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ" Π΄ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‡Π΅Ρ€Π΅Π· всС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, начиная ΠΎΡ‚ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ maildir для своСй систСмы. ΠœΡ‹ написали checkmail Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ вСрсий mail ΡƒΠ±ΠΈΡ€Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ пуст.

ΠœΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Π³Π». 5 для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² shell. Всякий Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика ΠΎΠ½Π° создаСт нСсколько процСссов ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ систСму большС, Ρ‡Π΅ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹. ВСрсия Π½Π° Π‘ΠΈ β€” СдинствСнный процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт stat для Ρ„Π°ΠΉΠ»Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ. Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ трСбуСтся Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ checkmail постоянно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ ΠΊΠ°ΠΊ фоновая Π·Π°Π΄Π°Ρ‡Π°? Как ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ наши измСрСния, это врСмя составляСт мСньшС сСкунды Π² час, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠΌ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ.

sv: ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΡ‹ собираСмся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Π½Π° cp ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ sv, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, замСняя ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» лишь Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈΠ»ΠΈ ΠΎΠ½ "ΡΡ‚Π°Ρ€ΡˆΠ΅" ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ (имя sv ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ"). Π‘ΡƒΡ‚ΡŒ дСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ пСрСписываСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π°, sv ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· индСксного дСскриптора, Ρ‡Π΅ΠΌ checkmail. Π’Ρ‹Π·ΠΎΠ² sv Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

$ sv file1 file2 ... dir

Она ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ file1 Π² dir/file1, file2 Π² dir/file2 ΠΈ Ρ‚.Π΄., Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π½ΠΎΠ²Π΅Π΅, Ρ‡Π΅ΠΌ Ρ„Π°ΠΉΠ»-источник; Π² этой ситуации ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ происходит ΠΈ пСчатаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ создания большого числа ΠΊΠΎΠΏΠΈΠΉ ΠΈΠ»ΠΈ связанных Ρ„Π°ΠΉΠ»ΠΎΠ² sv Π½Π΅ допускаСт примСнСния символов '/' Π² любом исходном ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°.

/* sv: save new files */

#include <stdio.h>

#include <sys/types.h>

#include <sys/dir.h>

#include <sys/stat.h>


char *progname;


main(argc, argv)

 int argc;

 char *argv[];

{

 int i;

 struct stat stbuf;


 char *dir = argv[argc-1];

 progname = argv[0];

 if (argc <= 2)

  error("Usage: %s files... dir", progname);

 if (stat(dir, &stbuf) == -1)

  error("can't access directory %s", dir);

 if ((stbuf.st_mode & S_IFMT) != S_IFDIR)

  error("%s is not a directory", dir);

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

  sv(argv[i], dir);

 exit(0);

}

ЗначСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, хранящиСся Π² индСксных дСскрипторах, ΠΈΡΡ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π² сСкундах (Π·Π° Π½Π°Ρ‡Π°Π»ΠΎ отсчСта принято врСмя 0:00 ΠΏΠΎ Π“Ρ€ΠΈΠ½Π²ΠΈΡ‡Ρƒ, 1 января 1970 Π³.), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ старыС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ мСньшиС значСния Π² ΠΏΠΎΠ»Π΅ st_mtime.

sv(file, dir) /* save file in dir */

 char *file, *dir;

{

 struct stat sti, sto;

 int fin, fout, n;

 char target[BUFSIZ], buf[BUFSIZ], *index();


 sprintf(target, "%s/%s", dir, file);

 if (index(file, '/') != NULL) /* strchr() in some systems */

  error("won't handle /'s in %s", file);

 if (stat(file, &sti) == -1)

  error("can't stat %s", file);

 if (stat(target, &sto) == -1) /* target not present */

  sto.st_mtime = 0; /* so make it look old */

 if (sti.st_mtime < sto.st_mtime) /* target is newer */

  fprintf(stderr, "%s: %s not copied\n", progname, file);

 else if ((fin = open(file, 0)) == -1)

  error("can't open file %s", file);

 else if ((fout = creat(target, sti.st_mode)) == -1)

  error("can't create %s", target);

 else

  while ((n = read(fin, buf, sizeof buf)) > 0)

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

    error("error writing %s", target);

 close(fin);

 close(fout);

}

ΠœΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ creat, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ sv ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. (Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ index ΠΈ strchr β€” Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹; посмотритС Π² справочном руководствС ΠΏΠΎ string(3), ΠΊΠ°ΠΊΠΎΠ΅ имя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ваша систСма.)

Π₯отя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sv довольно спСцифична, Π² Π½Π΅ΠΉ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ. МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ систСмными, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹. Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ сущСствСнно, Ρ‡Ρ‚ΠΎ прСдставлСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ хранится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стандартных Ρ„Π°ΠΉΠ»Π°Ρ… ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° <stat.h> ΠΈ <dir.h> ΠΈ Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ эти Ρ„Π°ΠΉΠ»Ρ‹ вмСсто Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… описаний. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с большСй ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ вСроятности пСрСносимы с ΠΎΠ΄Π½ΠΎΠΉ систСмы Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄Π²Π΅ Ρ‚Ρ€Π΅Ρ‚ΠΈ ΠΊΠΎΠ΄Π° sv составляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ошибок. На Ρ€Π°Π½Π½ΠΈΡ… этапах написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΎΡ‚ основной Π·Π°Π΄Π°Ρ‡ΠΈ. Когда ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π°Π·Π°Π΄ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sv Π½Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сбоСв. Она, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ прСрывания Π² нСподходящиС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Π°, Ρ‡Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ write. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π΄ΠΊΠΎ сбиваСтся Π½Π° этом ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅, поэтому ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Однако ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ дискового пространства, Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ Π² Π»ΠΈΠ½ΠΈΠΈ связи ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ошибки Π² write, ΠΈ Π²Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΏΡ€Π°Π²ΠΈΡ‚Π΅ΡΡŒ с Π½ΠΈΠΌΠΈ, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ошибок вСсьма ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»Π΅Π½, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ΅Π½. Из-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ объСма ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΡΡ‚ΠΈ ΠΈΠ·Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ Π² Π½Π΅ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΌΡ‹ Π½Π΅ удСляли Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ внимания этому вопросу. Но Π² настоящих, "производствСнных" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π΅ слСдуСт ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ сСбС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ошибки.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.10

ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ checkmail Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‰Π΅Π³ΠΎ сообщСниС: "Π£ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚Π°". Подсказка: sscanf, lseek.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.11

ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ checkmail Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠ»Π° ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² Ρ†ΠΈΠΊΠ». ΠžΠΊΠ°ΠΆΠ΅Ρ‚ Π»ΠΈ это ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΠΎΠ΅ влияниС Π½Π° Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ? Π‘ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΉ вопрос: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ checkmail, которая обходится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ процСссом для оповСщСния всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.12

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ watchfile, которая управляСт Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ с Π½Π°Ρ‡Π°Π»Π° всякий Ρ€Π°Π·, ΠΊΠ°ΠΊ ΠΎΠ½ измСнится. Когда Π±Ρ‹ Π²Ρ‹ Π΅Π΅ использовали?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.13

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° sv ΠΎΡ‡Π΅Π½ΡŒ "прямолинСйна" ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅ удаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.14

Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ sv рСкурсивной: Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· исходных Ρ„Π°ΠΉΠ»ΠΎΠ² β€” ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Ρ‚ΠΎ этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ всС Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ рСкурсивной cp. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, слСдуСт Π»ΠΈ cp ΠΈ sv ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ cp -v Π½Π΅ создавала копию, Ссли Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» Π½ΠΎΠ²Π΅Π΅ Ρ„Π°ΠΉΠ»Π°-источника.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.15

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ random.

$ random filename

Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ строку, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. Если Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» people, содСрТащий ΠΈΠΌΠ΅Π½Π°, random ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ scapegoat ("ΠΊΠΎΠ·Π΅Π» отпущСния"), ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΈ случайном ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π²ΠΈΠ½ΠΎΠ²Π½Ρ‹Ρ…:

$ cat scapegoat

echo "Π’ этом Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚ `random people`!"

$ scapegoat

Π’ этом Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚ КСн!

$

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ random Ρ…ΠΎΡ€ΠΎΡˆΠ° нСзависимо ΠΎΡ‚ распрСдСлСния Π΄Π»ΠΈΠ½Ρ‹ строк.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.16

Помимо ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ Π² индСксном дСскрипторС ΡƒΠΊΠ°Π·Π°Π½Ρ‹ адрСса размСщСния Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»Π° Π½Π° дискС. РассмотритС Ρ„Π°ΠΉΠ» <sys/into.h>, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ icat, которая Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, описываСмыС Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ записи ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈ устройством диска. (Она, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ диск ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.) ΠŸΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… icat ΠΏΠΎΠ»Π΅Π·Π½Π°?