Итак, я пытаюсь реализовать следующий оператор командной строки на С++, используя 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);
Таким образом, мой мыслительный процесс заключался в том, что мне нужно было перенаправить стандарт in (он же индекс 0 таблицы дескрипторов файлов) на файловый дескриптор файла, поскольку в индексе всегда используется стандартный ввод, и именно отсюда считываются входные данные. Затем, после выполнения, я заменяю его исходным стандартом. Поэтому я не понимаю, что я делаю неправильно.