Открытие канала в программу и ввод его в стандартный ввод

поэтому я пытаюсь выполнить программу, предоставленную пользователем, скажем, 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]);
}

1

Решение

Вместо этого:

ss << &c;

Использовать этот:

 ss << c;

Что вы делаете, чтобы написать char* в ваш поток, который считается строкой с нулевым символом в конце. Тем не менее, это просто символ, а не строка с нулевым символом в конце, поэтому то, что вы делаете, это неопределенное поведение. Вместо этого вы должны просто записать символ в поток.

0

Другие решения


По вопросам рекламы [email protected]