read
не записывает завершающий нулевой символ. После if ((count = read(pipeToChild[0], tmp, 50)) < 0)
программа передает tmp
, не записывая в него нулевую символику, в sprintf
.
Это приводит к тому, что команде echo
передаются дополнительные данные мусора из tmp
за пределы того, что было прочитано из канала, что, в свою очередь, заставляет grep
не найти подходящую строку.
Одним из исправлений было бы изменить read
на read(pipeToChild[0], tmp, sizeof tmp - 1)
и вставить tmp[count] = 0;
.
Почему Вы рассматриваете Javaspaces как мертвый вне того, что выпуск Jini 2.1 был некоторое время назад (октябрь 2005)? Используя это, я предположил бы, что это указывает на сформировавшийся и полный технологический набор, а не что-то отказавшееся и более не существующее.
Для другой реализации Javaspaces, смотрите на Javaspaces Блица. Это сохраняется и улучшается более регулярно (последний июль 2008 выпуска) и предлагает более производительную и управляемую реализацию Javaspace, чем значение по умолчанию outrigger
предоставленный Sun.
Gigaspaces является успешной коммерческой реализацией JavaSpaces - так, я не сказал бы, что JavaSpaces мертв.
Вы могли бы смотреть на , Java Обменялся данными Инструментарий ( также эта статья ), чтобы видеть, отвечает ли это Вашим требованиям.