Брайан Керниган - UNIX — универсальная среда программирования

Здесь есть возможность читать онлайн «Брайан Керниган - UNIX — универсальная среда программирования» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 1992, ISBN: 1992, Издательство: Финансы и статистика, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

UNIX — универсальная среда программирования: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «UNIX — универсальная среда программирования»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
.
Для программистов-пользователей операционной системы UNIX.

UNIX — универсальная среда программирования — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «UNIX — универсальная среда программирования», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

char *name;

int fd;

struct stat stbuf;

stat(name, &stbuf);

fstat(fd, &stbuf);

заполняет структуру stbufинформацией из индексного дескриптора для имени файла или дескриптора файла fd.

Зная все это, мы можем приступить к написанию некоторой полезной программы. Начнем с версии checkmail— программы на Си, которая следит за содержимым вашего почтового ящика. Если файл увеличивается, checkmailвыдает сообщение: "У вас есть корреспонденция" и включает звонок. (При уменьшении файла, видимо, из-за того, что вы успели прочитать и сбросить некоторую почтовую корреспонденцию, сообщение не требуется.) Для первого шага вы сделали вполне достаточно, а когда ваша программа заработает, вы станете знатоком.

/* checkmail: watch user's mailbox */

#include

#include

#include

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

#include

#include

#include

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 */

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «UNIX — универсальная среда программирования»

Представляем Вашему вниманию похожие книги на «UNIX — универсальная среда программирования» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «UNIX — универсальная среда программирования»

Обсуждение, отзывы о книге «UNIX — универсальная среда программирования» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x