Tengo un método, que lo que hace es que si lee determinado carácter (pongamos '<') tiene que crear un proceso hijo y redirigir la entrada de datos (cin) a un determinado fichero.
Bien esa parte ya la se hacer, mi problema es que al volver al main, (a pesar de haber hecho la redirección en un un proceso hijo, que tal como yo lo veo al volver al main debería estar muerto),
tengo un bucle en el que tengo un cin.getline, pero éste en lugar de esperar a que yo escriba por teclado,
avanza sin parar, sin dejarme escribir, y entonces nunca puedo salir del bucle.
¿Alguien me puede ayudar por favor?
Muchas gracias.
PD.: la entrada la redirijo a un fichero, ("1A").
Código:
int main(int argc,char* argv[]){
char* lElements[100];
int i=0;
if(argc==2){
ifstream fich;
fich.open(argv[1]);
if(!fich.fail()){
char** c=readFich(fich);
while(c[i]!=NULL){
trocear_linea(c[i],lElements);
ejecutar(lElements);
i++;
}
fich.close();
}
}else if(argc!=2){
char linea[100];
pwd();
cin.getline(linea,99,'\n');
while(strcmp(linea,"salir")!=0){
prueba();
pwd();
cin.getline(linea,99,'\n');
}
}
exit(0);
}
void pwd(){
int n=fork();
switch(n){
case -1:
cout<<"ERROR"<<endl;
break;
case 0:
execlp("pwd","pwd",NULL);
break;
default:
wait(NULL);
break;
}
}
void prueba(){
int n=fork();
switch(n){
case -1:
cout<<"ERROR"<<endl;
break;
case 0:
int fd,fd2;
fd=open("1A",O_RDONLY);
close(0);
fd2=dup(fd);
close(fd);
char l[100];
cin.getline(l,50);
break;
default:
wait(NULL);
break;
}
}