Проблемы с перенаправлением ввода в C ++ при записи - PullRequest
1 голос
/ 20 февраля 2020

Здравствуйте, я могу прекрасно прочитать файл, используя dup2, но у меня возникают проблемы при записи в файл и добавлении в него следующих команд:

shell: ls >+ lsout
shell: cat lsout

Вот код C ++, который обрабатывает dup2 для записи :

else if(write == true)
            {
                int fd = open(rCommand[1],O_WRONLY | O_APPEND);
                dup2(fd, 1);
                close(fd);
                execvp(substrings[0], substrings);
            }

Массив Substrings содержит аргументы, заданные в командной строке, а rCommand [1] - это имя файла того, что пытается быть открыто или записано.

Насколько я понимаю, ls> + lsout предполагает создание пустого файла с именем lsout, но вместо этого при выполнении только списков элементов в текущем каталоге. Любая помощь будет оценена

1 Ответ

0 голосов
/ 20 февраля 2020

хорошо, одна вещь, которую я узнал после запуска ls >+ lsout, это то, что он создает файл с именем +, а не lsout:

$ ls >+ lsout ls: cannot access 'lsout': No such file or directory

Следовательно, cat lsout неизбежно выдает ошибку:

$ cat lsout cat: lsout: No such file or directory

Так что я думаю, что это нужно решить, прежде чем двигаться дальше. Кроме того, при дальнейших исследованиях я обнаружил, что оператор execvp(substrings[0], substrings); может быть неправильным, поскольку execvp() принимает , как правило, в качестве первого аргумента в качестве указателя на файл, с которым мы имеем дело, но мой вывод заключается в том, что substrings[0] может содержать команду, которую мы выполнили, вместо имени файла.

И также, как сказал @aschepler, попробуйте опубликовать более описательный вопрос, сопровождаемый сообщениями об ошибках и побочными эффектами, как это полезно для тех, кто пытается решить вашу проблему:)

Best.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...