2016-10-13 1 views
-4

Je crée un shell simple en utilisant les fork et execvp. Quand je cours mon programme et je tape dans une commande comme ls ou ls -l cela fonctionne juste comment je l'aime. Quand cela est fait, mon programme est assis là en attendant une autre commande, mais quand je mets une autre commande valide ou même en mettant la même commande. execvp dit ls: cannot access 'ls': no such file or directory. Je ne sais pas pourquoi cela arrive. J'obtiens les mêmes résultats en relançant le programme. Voici mon code. Je ne peux pas le copier dans ma machine virtuelle, donc je pris une photo. (Si quelqu'un voudrait modifier le formattage sur ce qui serait génial. J'ai essayé de regarder l'aide)Execvp Exécute uniquement la première commande correctement

http://imgur.com/a/6ZhKP

+1

Nous avons besoin de voir du code pour pouvoir vous aider. Veuillez fournir un [exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) – Riley

+0

@Riley Désolé, j'ai appuyé sur Entrée pendant que je mettais des balises. Je n'arrive pas à faire apparaître l'image correctement, donc j'ai dû mettre un lien imgur car mon code ne serait pas copié via un vm. – DrakeJacks

+2

Ne postez pas d'images de texte! – Olaf

Répondre

1

Le problème dans votre code est que vous ne réinitialisez pas le compteur d'argument à 0 entre les lancements de commande.

int tokenIndex=0; 
do { 

devrait être

int tokenIndex; 
do { 
    tokenIndex=0; 

La première fois que cela fonctionne, mais la deuxième fois que vous passez ls comme argument de ls où le message

(essayez de taper ls ls dans un shell que vous aurez obtenez exactement le même message).