Выбрать главу

getput4  < words

то в результате на экране могут появиться, например, следующие строки:

В одном мгновеньи видеть вечность,

Огромный мир - в зерне песка,

В единой горсти - бесконечность,

И небо - в чашечке цветка.

Переключение ввода

     Теперь предположим (если вы еще не устали и в состоянии что-нибудь предположить), вам хочется, чтобы слова, вводимые с клавиатуры, попадали в файл с именем mywords. Для этого вы должны ввести команду

getput4 > mywords

и начать ввод символов. Символ > служит обозначением еще одной операции переключения, используемой в ОС UNIX. Ее выполнение приводит к тому, что создается новый файл с именем mywords, а затем результат работы программы ввод-вывод4, представляющий собой копию вводимых символов, направляется в данный файл. Если файл с именем mywords уже существует, он обычно уничтожается, и вместо него создается новый. (В некоторых реализациях ОС UNIX, однако, вам предоставляется возможность защитить существующие файлы.) На экране в данном случае появятся лишь вводимые вами символы; их же копии будут направлены в указанный файл. Чтобы закончить работу программы, введите признак EOF; в системе UNIX это обычно символ [CTRL/d]. Попробуйте воспользоваться описанной здесь операцией. Если вам ничего другого не придет в голову, просто воспроизведите на своей машине пример, приведенный ниже. Знак приглашения, выводимый на экран интерпретатором команд SHELL, обозначается здесь символом %. Не забывайте оканчивать каждую введенную строку символом [возврат], чтобы содержимое буфера пересылалось в программу.

% getput4 > mywords

у вас не должно быть трудностей с запоминанием того, какая операция переключения для чего предназначена. Необходимо помнить только, что знак каждой операции указывает на направление информационного потока. Вы можете по ассоциации представлять себе этот знак в виде воронки. [CTRL/d]

     После того как введен символ [CTRL/d], программа заканчивает свою работу и возвращает управление операционной системе UNIX, на что указывает повторное появление знака приглашения. Как убедиться в том, что наша программа вообще работала? В ОС UNIX существует команда Is, которая выводит на экран имена файлов; обращение к ней должно продемонстрировать вам, что файл с именем mywords теперь существует. Чтобы проверить его содержимое, вы можете воспользоваться командой cat или запустить заново программу ввод-вывод4, направляя в нее на этот раз содержимое входного файла.

% getput4 < mywords

Комбинированное переключение

     Предположим теперь, что вы хотите создать копию файла mywords и назвать ее savewords. Введите для этого команду

getput4 < mywords > savewords

и требуемое задание будет выполнено. Команда

getput4  > savewords < mywords

приведет к такому же результату, поскольку порядок указания операций переключения не имеет значения. Нельзя использовать в одной команде один и тот же файл и для ввода и для вывода одновременно.

getput4 mywords             НЕПРАВИЛЬНО

     Причина этого заключается в том, что указание операци, > mywords приводит к стиранию исходного файла перед его использованием в качестве входного.

                                                          РИС. 6.5. Комбинированное переключение.

     Теперь, мы думаем, настало время суммировать правила, касающиеся использования двух операций переключения < и >.

     1. Операция переключения связывает выполняемую программу (в том числе и стандартные команды ОС UNIX) с некоторым файлом. Она не может использоваться для связи одного файла с другим или одной программы с другой.

     2. Имя выполняемой программы должно стоять слева от знака операции, а имя файла - справа от него.

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

     4. Обычно между именем и операцией пробелы не обязательны кроме тех редких случаев, когда используются некоторые символы специального назначения в интерпретаторе команд UNIX. Мы могли бы писать, например, так: getput4 < words, или, что более предпочтительно, getput4 < words.

Мы уже привели выше несколько примеров правильного использования операций переключения. Ниже дается несколько ошибочных примеров (addup и count - выполняемые программы, a fish и stars - текстовые файлы).

fish > stars                 Нарушение правила 1

addup < count            Нарушение правила 1

stars > count              Нарушение правила 2

addup < fish < stars     Нарушение правила 3

count > stars fish        Нарушение правила 3

     B OC UNIX применяются также операция >>, позволяющая добавлять данные в конец существующего файла, и операция "канал" (|), связывающая файл вывода одной программы с вводом другой. Для получения более детальной информации обо всех этих операциях вам необходимо обратиться к руководству по ОС UNIX (по аналогии с этим нам приходит в голову название "ОС UNIX: руководство для начинающих").

     Рассмотрим еще один пример: напишем очень простую программу, шифрующую сообщения; с этой целью мы немного изменим программу ввод-вывод4 и получим

/* простой шифр */

/* заменяет каждый символ текста */

/* следующим по порядку из кода ASCII */

#include

 main( )

{ int ch;

  while ((ch = getchar ( )) ! = EOF)

   putchar (ch + 1);

}

     Функция putchar( ) переводит целое "ch + 1" в соответствующий символ. Выполните теперь компиляцию программы и поместите выполняемый объектный код в файл с именем simplecode. Затем занеси те приведенные ниже строки  в файл с именем original. (Для этого можно воспользоваться системным текстовым редактором или, как было показано ранее, программой ввод-вывод4) .

Good spelling is an aid

to clear writing.

Теперь введите команду

simplecode < original

Результат должен выглядеть приблизительно так:

!!!!!Hppe!tqfmmjoh!jt!bo!bje>Kup!dmfbs!xsjujohl> k

Буква G заменится на Н, о на р и т.д. Вас может удивить следующее: во-первых, что пробелы превратились в восклицательные знаки. Это служит напоминанием, что пробел - такой же символ, как и все остальные. Во-вторых, две строки слились в одну. Почему?