Mi idea es crear un peque�a shell...lo que pasa es que cuando ejecuto el siguiente programa va todo bien hasta que me salta el error
perror("Error al ejecutar la funci�n execvp\n");
Entonces la aplicaci�n me entra en un bucle(repitiendo todo el rato el error anterio), como puedo hacer para que eso no pase.
#include <iostream>
#include <unistd.h>
#include <cstring>
#include <sys/wait.h>
using namespace std;
const int MAX_ELEMENTOS=12; //De esta manera limitamos un numero maximo de "comandos", en este caso lo limitamos a 12.
void trocear_linea(char *, char *[]); //Utilizaremos esta funcion para dividir la linea de comandos que nosotros le metemos.
int main()
{
char cadena[100];
char *lista_elementos[MAX_ELEMENTOS];
pid_t pid; //Declaramos la variable pid.
cout<<"PROMPT-MI-SHELL: "; //Este es el mensaje que aparecera al ejecutar el programa, es decir el prompt.
cin.getline\(cadena,100\); //Leemos el prompt, y lo introducimos en la cadena que luego trocearemos.
trocear\_linea\(cadena,lista_elementos\); //Troceamos la linea de comandos que previamente le hemos introducido.
while \(strcmp\(lista_elementos[0],"salir"\)!=0\)
\{
pid=fork\(\); //Creamos un proceso hijo.
if\(pid==0\) //Evaluamos el pid del hijo y entonces ejecutamos el comando.
\{
if \(execvp\(lista_elementos[0], lista_elementos\)==-1\)
\{
perror\("Error al ejecutar la funcion execvp\\n"\); //Este error aparecer� cuando introduzcamos comandos erroneos.
\}
\}
else
\{
wait\(NULL\); //Si el pid es el del padre, este esperar� hasta que termine el proceso hijo.
cout<<"PROMPT-MI-SHELL: "; //Este es el mensaje que aparecera al ejecutar el programa, es decir el prompt.
cin.getline\(cadena,100\); //Leemos el prompt, y lo introducimos en la cadena que luego trocearemos.
trocear\_linea\(cadena,lista_elementos\); //Troceamos la linea de comandos que previamente le hemos introducido.
\}
\}
cout<<"El programa ha terminado";
}
void trocear_linea(char *linea, char *lista_elementos[])
{
char *elemento;
const char DELIMITADOR[]=" \t"; //Espacio en blanco o tabulador.
int num; //N�mero de elementos.
num=0;
while \(linea!=NULL && num<MAX_ELEMENTOS\)
\{
elemento=strsep\(&linea,DELIMITADOR\);
if \(strcmp\(elemento,""\)!=0\)
\{
lista_elementos[num]=elemento;
num\+\+;
\}
\}
lista_elementos[num]=NULL;
}