Это выглядит неправильно для меня:
write (user_pipe[u_id], cmd, sizeof(cmd));//cmd command
write (user_pipe[u_id], argument.c_str(), sizeof(argument.c_str()));
Как определяется cmd
? Ваш код верен, только если он определен как массив символов фиксированного размера. Вторая строка выглядит явно неправильно: argument.c_str()
возвращает char const *
, поэтому sizeof(argument.c_str())
вернет sizeof(char const *)
независимо от действительного значения argument
. Вы можете попробовать что-то вроде этого:
char const *carg = argument.c_str();
write(user_pipe[u_id], carg, strlen(carg) + 1);
Таким образом, полная строка (включая завершающий NUL
) должна быть передана ребенку.
Тогда в ребенке я думаю, что вы должны будь осторожнее. Вы делаете
read (0, &buf, 100);
, но затем потребляете только первую NUL
завершенную строку из buf
. Операция read
может прочитать больше, чем это. Вы должны проверить возвращаемое значение. В частности, убедитесь, что read
возвращает значение> 0. В противном случае ничего не может быть прочитано (возможно, произошла ошибка), а содержимое buf
не изменилось.