HI Newbi in Unix (spanish)

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&lt;&lt;"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&lt;&lt;"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&lt;&lt;"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&lt;MAX_ELEMENTOS\)
\{
elemento=strsep\(&linea,DELIMITADOR\);
    if \(strcmp\(elemento,""\)!=0\)
    \{
        lista_elementos[num]=elemento;
        num\+\+;
    \}
\}
lista_elementos[num]=NULL;

}

Hello.

Per our forum rules, all posts must be in English.

We do provide translation services for posts from English to a number of languages as a benefit to users. However, posts must be in English.

Please repost in English.

Thank you for your cooperation.

The UNIX and Linux Forums.