Чтение онлайн

на главную - закладки

Жанры

UNIX — универсальная среда программирования
Шрифт:
fp=fopen(s, mode)
Открыть файл
s
; значения
mode "r"
,
"w"
,
"a"
соответствуют чтению, записи и добавлению (при ошибке возвращается NULL)
c=gets(fp)
Читать символ:
getchar
это
getc(stdin)
putc(c, fp)
Записать символ:
putchar(c)
это
putc(c, stdout)
ungetc(c, fp)
Вернуть
символ во входной файл
fp
; можно вернуть не более одного символа за раз
scanf(fmt, a1, ...)
Читать символы из
stdin
в
a1
,
...
в соответствии с
fmt
. Каждый
ai
должен быть указателем
fscanf(fp,...)
Читать из файла
fp
sscanf(s,...)
Читать из строки
s
printf(fmt, a1, ...)
Форматировать
a1
, ... в соответствии с
fmt
; печатать в
stdout
fprintf(fp, ...)
Печатать
...
в файл
fp
sprintf(s, ...)
Печатать
...
в строку s
fqets(s, n, fp)
Читать не более
n
символов в
s
из
fp
(возвращается
NULL
по концу файла)
fputs(s, fp)
Печатать строку
s
в файл
fp
fflush(fp)
Занести буферизованные данные выходного потока в файл
fp
fclose(fp)
Закрыть файл
fp
fp=popen(s, mode)
Открыть программный канал для команды
s
(см.
fopen
)
pclose(fp)
Закрыть программный канал
fp
system(s)
Запустить команду
s
и ждать ее окончания

Таблица 6.4: Полезные стандартные функции ввода-вывода

Упражнение 6.11

Модифицируйте

zap
так, чтобы можно было применять любое число аргументов. В настоящем виде
zap
высвечивает на экране строку, соответствующую выбранному варианту. Будет она делать это? Если нет, модифицируйте программу соответствующим образом. Подсказка:
getpid(2)
.

Упражнение 6.12

Постройте

fgrep(1)
на основе
strindex
. Сравните время работы при сложных поисках, например 10 слов на документ. Почему
fgrep
выполняется быстрее?

6.8 Диалоговая программа сравнения файлов:

idiff

Поддерживать две чем-то отличающиеся версии файла, каждая из которых содержит часть нужного вам файла, довольно распространенная проблема. Зачастую она возникает в тех случаях, когда изменения вносятся независимо двумя разными людьми. Программа

diff
подскажет вам, чем различаются файлы, но вы не получите никакой помощи, если захотите выбрать какую-то информацию из одного файла, а какую-то из другого.

В

этом разделе мы напишем программу
idiff
(диалоговая
diff
), которая предоставляет пользователю каждую порцию выходного потока
diff
и предлагает ему возможность выбора фрагментов "от и до" или их редактирования. Программа
idiff
помещает выбранные фрагменты в соответствующем порядке в файл
idiff.out
. Допустим, даны такие два файла:

file1: file2:

This is This is

a test not a test

of of

your our

skill ability.

and comprehension.

diff
вырабатывает следующее:

$ diff file1 file2

2c2

< a test

– --

> not a test

4,6c4,5

< your

< skill

< and comprehension.

– --

> our

> ability.

$

Диалог с

idiff
может выглядеть так:

$ idiff file1 file2

2c2
Первое различие

< a test

– --

> not a test

? >
Пользователь выбрал вторую версию

4,6с4,5
Второе различие

< your

< skill

< and comprehension.

– --

> our

> ability.

? <
Пользователь выбрал первую (<) версию

idiff output in file idiff.out

$ cat idiff.out
Выходной поток направляется в этот файл

This is

not a test of

your skill

and comprehension.

$

Если вместо

<
или
>
выдан ответ
е
,
idiff
вызывает
ed
с двумя группами уже прочитанных строк. Если вторым был ответ
е
, буфер редактора выглядел бы следующим образом:

your

skill

and comprehension.

– --

our

ability.

Все, что пишется редактором обратно в файл, идет в окончательный выходной поток.

И, наконец, любая команда может быть выполнена внутри

idiff
с помощью временного выхода посредством !cmd.

Технически самая трудная часть работы

diff
, и она уже выполнена. Таким образом, в задачи
idiff
входит разбор выходного потока
diff
, открытие, закрытие, чтение и считывание соответствующих файлов в нужное время. Главная функция
idiff
поддерживает файлы и запускает процесс
diff
:

/* idiff: interactive diff */

#include <stdio.h>

#include <ctype.h>

char *progname;

#define HUGE 10000 /* large number of lines */

main(argc, argv)

 int argc;

 char *argv[];

{

 FILE *fin, *fout, *f1, *f2, *efopen;

 char buf[BUFSIZ], *mktemp;

Поделиться:
Популярные книги

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1