Redirect Stdin e Stdout de Arquivo
-
03-07-2019 - |
Pergunta
Eu sou atualmente o assistente de ensino para um Introdução ao C classe. A classe está sendo ensinada usando Visual Studio, mas quando grading eu só uso um simples script de lote do Windows para processar todos os envios de atribuição, compilá-los, executá-los em um arquivo de teste, e redirecionar a saída para uma série de arquivos de texto posso imprimir fora, marcar, e de volta a mão para os alunos. Todo o processo funciona muito bem, exceto pelo fato de que quando eu redirecionar stdin, ele não aparece na redirecionado stdout da mesma maneira que faz quando o mesmo stdin é digitado diretamente no console. Devido a isso, a saída do código formatado para o console não exibe corretamente na saída redirecionada. Os seguintes trechos de arquivo mostram este problema. Alguém sabe de uma solução simples?
arquivo: example.c
#include <stdio.h>
int main()
{
int v;
printf("Enter a number: ");
scanf("%i", &v);
printf("You entered: %d\n", v);
return 0;
}
arquivo: input.txt
42
Output (Console)
C:\>example.exe
Enter a number: 42
You entered: 42
C:\>
Output (redirecionamento)
C:\>example.exe < input.txt > output.txt
C:\>more output.txt
Enter a number: You entered: 42
C:\>
Solução
Esta é esperado (correto) comportamento. A entrada não é parte de stdout. Se você fizer example.exe > output.txt
e cegamente digitar 42, você deve esperar que 42 também mostra-se apenas uma vez na saída.
A única solução que eu poderia pensar é que o terminal / shell registra a sessão como um todo. shell de comando do Windows não é capaz disso. Você poderia escrever seu próprio proxy do terminal, porém, que alimenta stdin para o programa do aluno e lê o output, enquanto escrevendo tanto de forma combinada. É bastante fácil de garfo para exection de outro programa e redirecionamento que um de stdin / out sob POSIX (fornecido pela Cygwin), eu não sei sobre simples DOS / Windows embora.