J'essaye de faire un programme d'interface de ligne de commande qui peut obtenir la ligne de code de l'entrée d'utilisateur et les exécute using execlp.Un moyen plus efficace que: execlp (cmd [0], cmd [0], cmd [1] cmd [2], cmd [3] NULL);
Je veux savoir s'il y a une meilleure façon d'écrire mon code.
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3] NULL);
perror("Execlp");
Par exemple utilisateur d'entrer 4 mots et chacun d'entre eux seront stockées dans:
cmd[0] cmd[1] cmd[2] cmd[3]
si nous utilisons la compilation fonction qui est cc helloworld.c -o helloworld
cela nécessitera 4 l'espace intérieur tableau cmd[]
ou nous utilisons ./helloworld
il sera stocker dans cmd[0]
et ru Mais, je suppose que s'il y a une fonction qui nécessite plus de 4 mots, mon programme pourra-t-il les exécuter? La réponse est probablement pas, par exemple: s'il y a est 5 ou plusieurs mots, je ne pense pas que mon programme sera en mesure de fonctionner à moins que dans ma fonction, il aura élément 5 travailler
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3]. cmd[4], NULL);
ou
execlp(cmd[0], cmd[0], cmd[1] cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], NULL);
perror("Execlp");
Existe-t-il un moyen plus efficace de le faire? en utilisant d'autres fonctions dans la famille exec()
.
Merci :)
pourquoi ne pas utiliser 'int execvp (const char * fichier, char * const argv [])'? – pynexj
Hmm je l'utilise avant, mais je ne pense pas vraiment les comprendre, je vais poster un code sous peu, j'ai essayé de les utiliser et quand je l'utilise, il ne peut accepter qu'un certain nombre de valeur ... – markh
'((char * args [] = {cmd [0], cmd [1], NULL}; execvp (cmd [0], args); perror ("Execp");)' ce code uniquement travailler avec une fonction qui nécessite deux mots, par exemple 'cc hw.c';' rm hw.c'; si j'essaie 'cc hw.c -o hw' qui est de 4 mots ça ne marchera pas – markh