2012-09-30 2 views
0

Je suis en train de faire une implémentation de shell mineur en c, et je suis bloqué. Je veux pouvoir rediriger stdin et stdout, mais je suis confus. Dans mon shell, lorsque je veux démarrer un programme, j'utilise la fonction execvp. Maintenant, je voudrais être en mesure de rediriger stdout, donc si je cours un autre processus, la sortie devrait être redirigé vers un fichier au lieu de l'écran.freopen et execvp dans c

est un exemple de code ici:

pid_t pid; 

// Child process 
pid = vfork(); 

if((pid == 0)){ 
    freopen("myfile.txt", "w", stdout); 
    char* arr[3]; 
    arr[0] = "cat"; 
    arr[1] = "someFileToCat.txt"; 
    arr[2] = NULL; 
    execvp("cat", arr); 
    fclose(stdout); 
} 

Il n'imprime cependant dans le terminal, et non dans le fichier.

+0

duplication possible de [Redirection de la sortie exec vers un tampon ou un fichier] (http://stackoverflow.com/questions/2605130/redirecting-exec-output-to-a-buffer-or-file) – ChrisF

Répondre

3

Les flux de fichiers sont une abstraction C. Vous recherchez des appels système de niveau inférieur tels que open, close et dup2.

Voir Redirecting exec output to a buffer or file pour un exemple complet.

+0

+ 1-cant -conieve-j'ai-manqué-ça :) –