2008-10-21 9 views
2

Je suis actuellement l'assistant d'enseignement pour une classe Introduction à C. La classe est enseignée à l'aide de Visual Studio, mais lors de l'évaluation, j'utilise un simple script batch Windows pour traiter toutes les soumissions d'affectation, les compiler, les exécuter sur un fichier test et rediriger la sortie vers une série de fichiers texte. sortir, baliser et remettre aux étudiants. L'ensemble du processus fonctionne très bien, sauf que lorsque je redirige stdin, il n'apparaît pas dans la sortie redirigée de la même manière que lorsque le même fichier stdin est tapé directement dans la console. Pour cette raison, la sortie du code formaté pour la console ne s'affiche pas correctement dans la sortie redirigée. Les extraits de fichier suivants montrent ce problème. Est-ce que quelqu'un sait d'une solution simple?Rediriger Stdin et Stdout vers le fichier

fichier: example.c

#include <stdio.h> 

int main() 
{ 
    int v; 
    printf("Enter a number: "); 
    scanf("%i", &v); 
    printf("You entered: %d\n", v); 
    return 0; 
} 

fichier: input.txt

42 

sortie (Console)

C:\>example.exe 
Enter a number: 42 
You entered: 42 

C:\> 

sortie (Redirection)

C:\>example.exe <input.txt> output.txt 

C:\>more output.txt 
Enter a number: You entered: 42 

C:\> 

Répondre

4

Ceci est attendu (correct) comportement. L'entrée ne fait jamais partie de stdout. Si vous faites example.exe > output.txt et tapez aveuglément 42, vous devriez vous attendre à ce que 42 apparaisse également une seule fois dans la sortie.

La seule solution que je pourrais penser est que le terminal/shell enregistre la session dans son ensemble. Le shell de commande Windows n'est pas capable de cela. Vous pouvez cependant écrire votre propre proxy terminal, qui alimente stdin dans le programme de l'étudiant et lit le résultat lui-même, tout en écrivant les deux de manière combinée. Il est assez facile de faire un fork pour l'exection d'un autre programme et de rediriger son stdin/out sous POSIX (fourni par Cygwin), mais je ne connais pas le DOS/Windows.

+0

Je me rends compte que le comportement que je vois est correct. Ce que je voudrais faire, c'est simuler le comportement de la configuration de la console avec un script. Avez-vous un petit exemple de comment faire avec POSIX? (J'ai beaucoup travaillé avec Cygwin/* nix avant et je n'ai aucun problème à utiliser l'un ou l'autre si c'est ce qu'il faut.) –

+0

Laissez-moi voir si je trouve un exemple de code plus tard. – ypnos

+0

Regardez ici pour un bon exemple de forking w/redirection, puis exec: http://publicabstractvoid.blogspot.com/2008/01/forkexec-while-redirecting-io.html – ypnos

Questions connexes