Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SARGE553413 en 27 Mayo 2013, 02:39 am



Título: Duda con redirección de entrada estándar en C++.
Publicado por: SARGE553413 en 27 Mayo 2013, 02:39 am
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").

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


Título: Re: Duda con redirección de entrada estándar en C++.
Publicado por: flony en 28 Mayo 2013, 13:09 pm
tal vez este errado pero bue ahi mi intento de ayuda
Código:
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