поэтому я пытаюсь выполнить программу, предоставленную пользователем, скажем, ls в системе Unix. И сохраните все это в строку, чтобы я мог сохранить ее на карте.
Моя программа, которую мне нужно вызвать, это Variables [key] (которая является map), которая представляет собой команду, отправленную пользователем, после чего я хочу сохранить поверх нее созданную ею строку. Это код, который я пытался адаптировать к нему, изначально это было перенаправление на файл, но возникли проблемы при попытке использовать его с потоком строк. Заранее благодарю за любую помощь <3
string key = argv[1];
int fds[2];
int count;
int fd;
char c;
pid_t pid;
pipe(fds);if (fork() == 0)
{
dup2(fds[0], 0);close(fds[1]);
stringstream ss;
while ((count = read(0, &c, 1)) > 0)
{
ss << &c;
}
string temp;
ss >> temp;
cout << temp << endl;execlp("echo", "echo", NULL);}
else if ((pid = fork()) == 0)
{
dup2(fds[1], 1);
close(fds[0]);
cout << argv[1] << argv << endl;
execvp(argv[1], argv);
perror("execvp failed");
}
else
{
waitpid(pid, NULL, 0);
close(fds[0]);
close(fds[1]);
}
Вместо этого:
ss << &c;
Использовать этот:
ss << c;
Что вы делаете, чтобы написать char*
в ваш поток, который считается строкой с нулевым символом в конце. Тем не менее, это просто символ, а не строка с нулевым символом в конце, поэтому то, что вы делаете, это неопределенное поведение. Вместо этого вы должны просто записать символ в поток.