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

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

Жанры

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;

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

Deus vult

Рокотов Алексей
3. Путь князя
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Deus vult

Газлайтер. Том 20

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

Черный Маг Императора 15

Герда Александр
15. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
фантастика: прочее
5.00
рейтинг книги
Черный Маг Императора 15

Агенты ВКС

Вайс Александр
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Агенты ВКС

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Законник Российской Империи

Ткачев Андрей Юрьевич
1. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Законник Российской Империи

Бастард Бога (Дилогия)

Матвеев Владимир
Фантастика:
альтернативная история
5.11
рейтинг книги
Бастард Бога (Дилогия)

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

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

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Спавшая пелена

Кронос Александр
1. Благие намерения
Фантастика:
эпическая фантастика
фэнтези
5.00
рейтинг книги
Спавшая пелена

1941, Великая Отечественная катастрофа: Итоги дискуссии

Коллектив авторов
Документальная литература:
военная документалистика
6.25
рейтинг книги
1941, Великая Отечественная катастрофа: Итоги дискуссии

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага