Отправить «пользовательский ввод» процессу, выполняющему программу с помощью exec

#c #input #process #pipe #fork

#c #ввод #процесс #канал #fork

Вопрос:

Я пишу программу (на c) для сравнения выходных данных двух исполняемых файлов. Я учусь в колледже и хотел бы получить хороший способ сравнить выходные данные моего профессорского кода для проекта (поведение которого мне нужно воспроизвести в моем коде) с выводом моего кода. Это было бы легко, если бы мне не нужно было беспокоиться о пользовательском вводе.

Основная идея: моя идея для этого проекта заключается в том, что я бы создал два дополнительных процесса. Один из которых запускает мой код и отправляет выходные данные в файл, и запускает мой профессорский код и отправляет выходные данные в файл. В рамках каждого процесса программа может запрашивать у пользователя некоторый ввод. Я не хочу вручную вводить ввод во время выполнения основной программы. Я бы хотел, чтобы одним из основных аргументов программы были аргументы, которые передаются в каждую программу.

Мой вопрос: мне понадобится способ точно узнать, когда подпрограммы запрашивают пользовательский ввод, и мне нужен какой-то метод, с помощью которого можно отправлять аргументы каждой подпрограмме. Я знаком с обменом данными между процессами, но я не уверен, как имитировать пользовательский ввод. Я хотел бы иметь возможность использовать это для всех моих заданий по программированию, то есть я не хочу изменять код каждый раз, когда получаю новое задание. Кроме того, у меня нет доступа к профессорскому коду и, следовательно, я не могу его изменить. У меня есть доступ только к исполняемому файлу. Что мне делать?

Комментарии:

1. Было бы проще написать программу, разветвить процесс внутри этой программы, позволить родительскому процессу выполнить вашу программу, а дочернему процессу обработать ваши профессора с тем же вводом. Передайте выходные данные в два разных файла, то есть myFile и profFile , и используйте diff для сравнения обоих выходных данных.

2. да, я знаю. Моя цель состоит в том, чтобы не приходилось вручную вводить данные между пользователями для ОБЕИХ программ. Если это невозможно, я сделаю это именно так.

3. Хорошо, почему бы вам вручную не ввести свой ввод один раз в файл, каждая строка которого содержит пользовательский ввод, который вы обычно вводите ( вручную ), затем запустите программу и передайте входной файл в программу вашего профессора? т. Е. ./myProgramm < inputFile Не имеет значения, когда программа запросит пользовательский ввод, поскольку он будет считываться из входного файла.

Ответ №1:

Взгляните на expect(1) . Он должен делать все, что вам нужно.