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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

print(stdin, PAGESIZE);

else

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

fp = efopen(argv[i], "r");

print(fp, PAGESIZE);

fclose(fp);

}

exit(0);

}

Функция efopenреализует весьма общую операцию: пытается открыть файл. Если же это невозможно, она выводит на печать сообщение об ошибке, и ее выполнение завершается. Чтобы обеспечить выдачу сообщений об ошибках, идентифицирующих программу, в которой происходит (или произошла) ошибка, efopenссылается на внешнюю строку progname, где содержится имя программы, устанавливаемое в main:

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

}

Мы испытали две версии программы efopen, прежде чем остановиться на данной. Одна из них должна была после печати сообщения завершиться, возвратив нулевой указатель, свидетельствующий о неудаче. Это позволяет вызвавшей программе продолжить свое выполнение или завершиться. Другая версия снабжала efopenтретьим аргументом, указывающим, следует ли возвращаться после того, как файл открыть не удалось. Почти во всех наших примерах, однако, нет смысла продолжать работу, если файл недоступен, так что текущая версия efopenявляется для нас наилучшей.

Непосредственное выполнение команды pосуществляется в print:

print(fp, pagesize) /* print fp in pagesize chunks */

FILE *fp;

int pagesize;

{

static int lines = 0; /* number of lines so far */

char buf[BUFSIZ];

while (fgets(buf, sizeof buf, fp) != NULL)

if (++lines < pagesize)

fputs(buf, stdout);

else {

buf[strlen(buf)-1] = '\0';

fputs(buf, stdout);

fflush(stdout);

ttyin();

lines = 0;

}

}

Мы использовали здесь BUFSIZ, который определен в как размер буфера входного потока. Функция fgets(buf, size, fp)выбирает следующую строку входного потока из fpдо символа перевода строки (включая его) в буфер и добавляет завершающий символ \0. Копируется на более size - 1символов. По достижении конца файла возвращается NULL. (Конструкция fgetsоставляет желать лучшего: она возвращает bufвместо счетчика символов и, кроме того, выдает предупреждение о том, что входная строка была слишком длинной. Символы не потеряны, но вы должны взглянуть на buf, чтобы понять, что в самом деле случилось.)

Функция strlenвозвращает длину строки, поэтому мы можем отбросить завершающий символ перевода строки последней входной строки. После вызова fputs(buf, fp)строка bufзаписана в файл fp. При вызове fflushв конце страницы происходит вывод буферизованного выходного текста.

Считывание ответа пользователя в конце каждой страницы возложено на функцию ttyin. Функция ttyinне может читать стандартный входной поток, тогда как pдолжна выполняться, даже если входной поток поступает из файла или конвейера. Чтобы справиться с этим, программа открывает файл /dev/tty, которому поставлен в соответствие пользовательский терминал при любом переключении стандартного входного потока. Приведенная ниже функция ttyinвозвращает первую букву ответа, но здесь это свойство не используется.

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

}

Указатель на файл devttyописан как статический, так что его значение сохраняется от одного вызова ttyinдо другого; файл /dev/ttyоткрывается только при первом вызове.

Очевидно, есть дополнительные средства, которые без особых усилий можно ввести в p, однако наша первая версия этой программы только печатает 22 строки и ждет следующей порции. Прошло немало времени, прежде чем в нее были добавлены другие средства, но в настоящее время ими мало кто пользуется. В частности, весьма простое дополнение ввод переменной pagesizeдля хранения числа строк на странице. Значение переменной можно установить из командной строки

$ p -n...

Она печатает порции по nстрок. Для этого требуется лишь добавить несколько знакомых вам операторов в начале main:

/* p: print input in chunks (version 2) */

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

Интервал:

Закладка:

Сделать

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

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


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

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

x