Перенаправление ввода с использованием dup2 ()

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

0

Решение

Файл_desc открывается только для записи (O_WRONLY) — попробуйте открыть его для чтения (O_RDONLY).

Вы также можете захотеть:

  • dup2 () между fork () и exec () вместо того, чтобы сохранять и восстанавливать системные вызовы без stdin и спасает гонку в многопоточных приложениях.

  • закрыть file_desc в родительском процессе

  • закрыть file_desc в дочернем процессе после dup2 (и до exec)
0

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

Других решений пока нет …

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