Если вы используете SQL Server, поместите одинарные кавычки вокруг дат. Если нет, тогда он будет вычислять выражение вместо даты.
BETWEEN '1/1/2010' AND '12/31/2010'
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;
.