Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kernigan_paik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.91 Mб
Скачать

8.5. Обмен данными

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

Для обмена данными используйте текст. С текстом легко оперировать посредством множества программ; его можно обрабатывать разными, самыми неожиданными способами. Например, если вывод одной про­граммы нельзя использовать напрямую для ввода в другую, то скрипт на Awk или Perl позволяет легко его преобразовать в нужный вид. С помо­щью grep можно производить отбор строк, а ваш любимый редактор по­может произвести более сложные преобразования. Кроме всего прочего, текстовые файлы легко документировать, да и пояснений к ним требует­ся гораздо меньше, потому что их всегда можно прочитать. Коммента­рий в текстовом файле может указывать, какая версия программы необ­ходима для обработки данных: например, первая строка файла PostScript определяет версию языка (и, возможно, тип документа):

%!PS-Adobe-2.0

В противоположность текстовым двоичные файлы требуют для своей обработки специализированные средства, и их редко удается использо­вать совместно даже на одной машине. Существует множество известных программ, преобразующих произвольные двоичные данные в текст. Среди них стоит назвать binhex для Macintosh, uuencode и uudecode для Unix и различные инструменты, использующие кодировку MIME для преобразования двоичных данных в почтовые сообщения. В главе 9 мы расскажем о ряде средств паковки и распаковки двоичных данных для их передачи с сохранением переносимости. Кстати, уже само обилие та­ких инструментов подчеркивает наличие серьезных проблем, связанных с двоичными форматами.

С передачей текста связана одна давняя проблема: PC-системы (опе­рационные системы DOS и Windows) используют для обозначения кон­ца строки символ возврата каретки ' \r' и символ перевода строки ' \n', а системы Unix — только символ перевода строки. Возврат каретки — это артефакт, дошедший до нас от древнего устройства, называемого те­летайпом, который имел операцию возврата каретки (CR) для возврата печатающего механизма в начало строки и отдельный оператор протяж­ки на строку (LF — от Line Feed) для перевода этого механизма на следу­ющую строку.

Несмотря на то что в современных компьютерах уже нет кареток, ко­торые бы надо было возвращать, программное обеспечение для PC, по большей своей части, продолжает ожидать этой комбинации (известной также как CRLF, произносится "curliff") в конце каждой строки. Если в файле отсутствуют возвраты каретки, то он может быть проинтерпре­тирован как одна гигантская строка, при этом счетчики строк и симво­лов могут вести себя непредсказуемым образом. Некоторые программы умеют изящно справляться с этой проблемой, но таких - меньшинство. Надо сказать, что PC не единственный виновник подобного безобразия: благодаря последовательному внедрению требований совместимости некоторые современные сетевые стандарты, такие как HTTP, также ис­пользуют CRLF для разделения строк.

Мы можем посоветовать использовать стандартные интерфейсы, ко­торые воспринимают CRLF в зависимости от конкретной системы — либо (для PC) удаляя символ при вводе и добавляя его обратно на выходе, либо (для Unix), никогда даже не создавая его. Для файлов, ко­торые должны будут передаваться туда и обратно, необходимо написать программу, преобразующую их форматы.

Упражнение 8-2

Напишите программу, которая бы удаляла из файла случайно образо­вавшиеся возвраты каретки. После этого напишите еще одну, которая бы добавляла их в файл, заменяя символы перевода строки комбинаци­ей возврата каретки и перевода строки. Как вы будете тестировать эти программы?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]