Duda con redirección de entrada estándar en C++.

Iniciado por SARGE553413, 27 Mayo 2013, 02:39 AM

0 Miembros y 1 Visitante están viendo este tema.

SARGE553413

Hola a todos, expongo mi duda:

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").


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;
}
}

flony

tal vez este errado pero bue ahi mi intento de ayuda
void pwd(){
...
case 0:
execlp("pwd","pwd",NULL);
break;

si entendí bien...cuando se usa la función pwd una de las opciones es usar una función  llamada execlp y le pasas como parámetro la misma función pwd?...ahí creo que se hace la imposibilidad de salir del bucle
si un problema no tiene solucion entonces no es un problema...es algo inevitable