Похоже, у вас было 2 проблемы. Во-первых, recv
не завершает строку нулем. Поэтому, если отправитель не отправил ноль, вам нужно его добавить. Во-вторых, параметры execvp
были неверными:
int bytes_rcvd;
char word[30];
if ((bytes_rcvd = recv(new_sock, &word, sizeof(word), 0)) > 0 && bytes_rcvd < sizeof(word)) {
word[bytes_rcvd] = '\0';
const char *exp[] = {"grep", "-w", "-i", word, NULL};
execvp(exp[0], exp);
}