Ваш код выглядит немного не так. Конкретно здесь:
do {
read(newSock, linha, 1024);
/* Escreve o buffer no pipe */
write(input[1], linha, strlen(linha));
close(input[1]);
while ((d = read(output[0], buffer, 255))) {
//buffer[d] = '\0';
write(newSock, buffer, strlen(buffer));
puts(buffer);
}
write(newSock, "END", 4);
} while (strcmp(linha, "quit") != 0);
Вы закрываете input[1]
после первой итерации внешнего цикла do / while, но вам нужен этот дескриптор для каждой итерации.
Также, если внутренний цикл while, вы будете продолжать читать, пока не получите EOF. Но так как программа все еще открыта, вы не получите EOF, пока программа не закончится. Поэтому вам нужно найти какой-то другой способ узнать, что программа вернула вам все ваши данные.