#c #input #process #pipe #fork
#c #ввод #процесс #канал #fork
Вопрос:
Я пишу программу (на c) для сравнения выходных данных двух исполняемых файлов. Я учусь в колледже и хотел бы получить хороший способ сравнить выходные данные моего профессорского кода для проекта (поведение которого мне нужно воспроизвести в моем коде) с выводом моего кода. Это было бы легко, если бы мне не нужно было беспокоиться о пользовательском вводе.
Основная идея: моя идея для этого проекта заключается в том, что я бы создал два дополнительных процесса. Один из которых запускает мой код и отправляет выходные данные в файл, и запускает мой профессорский код и отправляет выходные данные в файл. В рамках каждого процесса программа может запрашивать у пользователя некоторый ввод. Я не хочу вручную вводить ввод во время выполнения основной программы. Я бы хотел, чтобы одним из основных аргументов программы были аргументы, которые передаются в каждую программу.
Мой вопрос: мне понадобится способ точно узнать, когда подпрограммы запрашивают пользовательский ввод, и мне нужен какой-то метод, с помощью которого можно отправлять аргументы каждой подпрограмме. Я знаком с обменом данными между процессами, но я не уверен, как имитировать пользовательский ввод. Я хотел бы иметь возможность использовать это для всех моих заданий по программированию, то есть я не хочу изменять код каждый раз, когда получаю новое задание. Кроме того, у меня нет доступа к профессорскому коду и, следовательно, я не могу его изменить. У меня есть доступ только к исполняемому файлу. Что мне делать?
Комментарии:
1. Было бы проще написать программу, разветвить процесс внутри этой программы, позволить родительскому процессу выполнить вашу программу, а дочернему процессу обработать ваши профессора с тем же вводом. Передайте выходные данные в два разных файла, то есть myFile и profFile , и используйте diff для сравнения обоих выходных данных.
2. да, я знаю. Моя цель состоит в том, чтобы не приходилось вручную вводить данные между пользователями для ОБЕИХ программ. Если это невозможно, я сделаю это именно так.
3. Хорошо, почему бы вам вручную не ввести свой ввод один раз в файл, каждая строка которого содержит пользовательский ввод, который вы обычно вводите ( вручную ), затем запустите программу и передайте входной файл в программу вашего профессора? т. Е.
./myProgramm < inputFile
Не имеет значения, когда программа запросит пользовательский ввод, поскольку он будет считываться из входного файла.
Ответ №1:
Взгляните на expect(1) . Он должен делать все, что вам нужно.