вторник, 4 октября 2011 г.

Что есть "тулза-фильтр" ?

Решил сознаться в собственном 2х недельном тупизме. Кто будет читать наверно будет в диком восторге, как будто баш прочитал.

Предистория :
Решил таки написать себе криптор, ато без подобной тулзы как-то не живется! ;) Думаю "криптор" вполне понятно для чего и зачем надо...


Разработка:
Подумал что было бы неплохо принимать на входе некоторого сетевого интерфейса файлы и потом какой-нить тулзой формировать принятое куда-нить, чтобы криптор мог бы обработать и подать на выход, а дальше чтобы другая тулза полученную крипту послала по сети куда-нить. Решил, почему-то, что уж очень это похоже на тулзу-фильтр в привычной многим UNIX-философии, а раз так то буду ка я принимать вход на STDIN и выдавать крипту на STDOUT. Ну а дальше кому-чего надо пусть пишет все по средством shell пайпов и т.д. и т.п. Вроде счастье есть.

Затык:
В виду того что мой криптор работает с исполнимыми файлами, формат которых далеко не тривиален и поэтому в них надо позиционироваться от начала к концу и довольно часто, то надо бы иметь на входе Random Access. Как на STDIN получить это?

Вывод:
Собственно вывод прост, там где надо на входе иметь Random Access, то это уже не тулза-фильтр!
Почему:
  • Это не тулза-фильтр потому что подход UNIX-way гласит "постарайтесь гадить текстом", т.е. работая с бинарными данными это означает идет резработка весьма прикольного фильтра.
  • На входе, т.е. STDIN, можно  получить Random Access скопировав куда-нить входное внутренний временной файл. Но это же костыль!
Как понял ? Как и советует вся "Программер индустрия":
  1. Если что-то идет с треском, значит ты где-то что-то не допонял или пишешь не верно.
  2. Страйся, по мере возможностей, показать свои мысли кому-нить, возможно кто-то покажет в чем именно ты дебил?!

1 комментарий:

The NT Visigoth комментирует...

На самом-то деле НЕТ ничего постыдного в Чтении бинарных данных из STDIN и Запись в STDOUT! Это достаточно редко используемое, но все же есть. Примеры: gzip, tar. Однако, как я уже писал в топике, тулзам работающими со STDIN где нужно позиционироваться, приходится куда-то в какой-нить зачитать из стрима и уж потом работать с этим временным файлом.

Мораль: Брать из STDIN можно все, в том числе и бинарные данные, но только нужно быть внимательней!