Читаем UNIX полностью

 for (i = 0; s[i] != '\0'; i++)

  if (strncmp(s+i, t, n) == 0)

   return i;

 return -1;

}

В табл. 6.4 представлены широко используемые функции из стандартной библиотеки ввода вывода.

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 выполняется быстрее?

<p>6.8 Диалоговая программа сравнения файлов: <code>idiff</code></p>

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

Перейти на страницу:

Похожие книги