/* 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 ΠΏΠΎΠ»Π΅Π·Π½Π°?