7.2.2.5. Контрпример: почему программа fetchmail не выполнена в виде конвейера

7.2.2.5. Контрпример: почему программа fetchmail не выполнена в виде конвейера

В понятиях Unix fetchmail является неудобной большой программой, изобилующей различными параметрами. Рассматривая способ транспортировки почты, можно предположить, что данную программу можно было бы разложить на компоненты конвейера. Предположим, что она разбита на ряд программ: несколько программ доставки для получения почты с РОРЗ- и IMAP-узлов, и локальный SMTP-инжектор. Конвейер мог бы передавать почтовый формат Unix. Существующую сложную конфигурацию fetchmail можно было бы заменить сценарием оболочки, содержащим строки команд. В такой конвейер можно также добавить фильтры для блокировки спама.

#!/bin/sh

imap jrandom®imap.ccil.org | spamblocker | smtp jrandom imap jrandom@imap.netaxs.com | smtp jrandom # pop ed@pop.terns.com | smtp j random

Такая конструкция была бы весьма изящной и соответствовала бы духу Unix, но не смогла бы работать. Причина рассматривалась выше — конвейеры являются однонаправленными.

Одной из функций программы доставки (imap или pop) было бы принятие решения о том, отправлять ли запрос на удаление каждого принимаемого сообщения. В существующей организации fetchmail отправка такого запроса POP- или IMAP-серверу может быть задержана до тех пор, пока программа не получит подтверждения о том, что локальный SMTP-слушатель взял на себя ответственность за данное сообщение. Версия программы, организованная в виде конвейера из небольших компонентов, потеряла бы данное свойство.

Рассмотрим, например, последствия аварийного завершения smip-инжектора вследствие того, что SMTP-получатель сообщил о переполнении диска. Если программа доставки уже удалила почту, сообщения будут утеряны. Это означает, что программа доставки не может удалять почту до тех пор, пока не получит соответствующее уведомление от smtp-инжектора. Причем с данной проблемой связан ряд вопросов. Каким образом программы обменивались бы данными? Какое в точности сообщение было бы возвращено инжектором? Общая сложность такой системы и ее подверженность неочевидным ошибкам были бы выше, чем сложность монолитной программы.

Конвейеры являются превосходными инструментами, но они не универсальны.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

6.1.2. Учебный пример: параметр -v программы fetchmail

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

6.1.2. Учебный пример: параметр -v программы fetchmail fetchmail — программа-шлюз. Ее главной задачей является преобразование между протоколами удаленной загрузки почты РОРЗ или IMAP и собственным протоколом Internet SMTP для обмена почтой. Он чрезвычайно широко распространен на


10.6.1. Учебный пример: fetchmail

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

10.6.1. Учебный пример: fetchmail Программа fetchmail использует только две переменные среды — USER и НОМЕ. Данные переменные входят в состав предопределенного набора конфигурационных данных, инициализируемых системой, и используются многими программами.Значение переменной НОМЕ


14.4.1.1. Учебный пример: fetchmail

Из книги Системное программирование в среде Windows автора Харт Джонсон М

14.4.1.1. Учебный пример: fetchmail Наилучший пример использования С — само ядро Unix, для которого язык программирования, свободно поддерживающий операции на аппаратном уровне, действительно является сильным преимуществом. Но fetchmail представляет собой пример пользовательской


6.1.2. Учебный пример: параметр -v программы fetchmail

Из книги Сетевые средства Linux автора Смит Родерик В.

6.1.2. Учебный пример: параметр -v программы fetchmail fetchmail — программа-шлюз. Ее главной задачей является преобразование между протоколами удаленной загрузки почты POP3 или IMAP и собственным протоколом Internet SMTP для обмена почтой. Он чрезвычайно широко распространен на Unix-машинах,


7.2.2.5. Контрпример: почему программа fetchmail не выполнена в виде конвейера

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

7.2.2.5. Контрпример: почему программа fetchmail не выполнена в виде конвейера В понятиях Unix fetchmail является неудобной большой программой, изобилующей различными параметрами. Рассматривая способ транспортировки почты, можно предположить, что данную программу можно было бы


10.6.1. Учебный пример: fetchmail

Из книги Цифровой журнал «Компьютерра» № 176 автора Журнал «Компьютерра»

10.6.1. Учебный пример: fetchmail Программа fetchmail использует только две переменные среды — USER и НОМЕ. Данные переменные входят в состав предопределенного набора конфигурационных данных, инициализируемых системой, и используются многими программами.Значение переменной HOME


14.4.1.1. Учебный пример: fetchmail

Из книги Цифровой журнал «Компьютерра» № 201 автора Журнал «Компьютерра»

14.4.1.1. Учебный пример: fetchmail Наилучший пример использования С — само ядро Unix, для которого язык программирования, свободно поддерживающий операции на аппаратном уровне, действительно является сильным преимуществом. Но fetchmail представляет собой пример пользовательской


Комментарии по поводу многоступенчатого конвейера

Из книги автора

Комментарии по поводу многоступенчатого конвейера Данная реализация характеризуется некоторыми особенностями, суть которых частично отражена в комментариях, включенных в листинг программы. На эти же особенности обращают ваше внимание и упражнения 10.6, 10.7 и


Использование Fetchmail

Из книги автора

Использование Fetchmail Fetchmail — не совсем обычная программа. Она не является ни программой просмотра почты, ни почтовым сервером, но в то же время сочетает элементы их обоих. Fetchmail извлекает письма с сервера получения и передает их другой программе; чаще всего Fetchmail


Участие Fetchmail в процессе доставки почты

Из книги автора

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


14.3. Агент доступа — fetchmail

Из книги автора

14.3. Агент доступа — fetchmail Программа fetchmail используется для загрузки сообщений с сервера входящей почты в почтовый ящик пользователя. В домашнем каталоге того пользователя, от имени которого будет запускаться fetchmail, создайте файл .fetchmailrc. Добавьте в него следующие строки:set


Мрачные итоги Pwn2Own: почему браузеры так легко взломать и почему линуксоидам можно волноваться меньше? Евгений Золотов

Из книги автора

Мрачные итоги Pwn2Own: почему браузеры так легко взломать и почему линуксоидам можно волноваться меньше? Евгений Золотов Опубликовано 11 марта 2013 В английском айтишном жаргоне есть словечко «pwned», перевести которое на русский можно таким же коротким «поимели». Грубо,


Почему Google уничтожает свой Reader — и почему это хорошо? Евгений Золотов

Из книги автора

Почему Google уничтожает свой Reader — и почему это хорошо? Евгений Золотов Опубликовано 15 марта 2013 Когда в среду руководители Google ставили точку в истории одного из своих многочисленных веб-сервисов, едва ли они могли вообразить, какая реакция за этим последует. Согласно


Милого узнаю по геному: почему Америка так боится ДНК-отпечатков (и почему не боимся мы) Евгений Золотов

Из книги автора

Милого узнаю по геному: почему Америка так боится ДНК-отпечатков (и почему не боимся мы) Евгений Золотов Опубликовано 06 июня 2013 Биометрическая идентификация — штука замечательная, но непростая. В теории, по физиологическим особенностям, присущим


ТВ на заказ: как Intel строила главный ТВ-сервис Америки, почему не получилось и почему может получиться у нас Евгений Золотов

Из книги автора

ТВ на заказ: как Intel строила главный ТВ-сервис Америки, почему не получилось и почему может получиться у нас Евгений Золотов Опубликовано 29 ноября 2013 Нечасто, но случается, некоторое событие остаётся незамеченным несправедливо — потому только, что