Поэтому я пытаюсь реализовать следующий оператор командной строки в c ++, используя dup2 () и execvp (): wc < inputFile.txt
, а затем возвращаюсь к моей командной строке.Так что в основном я разветвляю процесс и выполняю эту команду в дочернем процессе.Однако мой код следующая ошибка: wc: stdin: read: Bad file descriptor
Вот мой код:
int file_desc = open(fileName.c_str(), O_WRONLY | O_APPEND);
int stdin = dup(0);
dup2(file_desc,0);
execvp (args2[0], args2); // now execute
dup2(stdin, 0);
Таким образом, мой мыслительный процесс состоял в том, что мне нужно было перенаправить стандарт в (он же индекс 0 файлатаблица дескрипторов) к файловому дескриптору файла, так как при index всегда указывается stdin, и именно из него читаются входные данные.Затем, после выполнения, я заменяю его обратно на исходный стандарт. Поэтому я не понимаю, что я делаю неправильно.