elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con redirección de entrada estándar en C++.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con redirección de entrada estándar en C++.  (Leído 2,789 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Duda con redirección de entrada estándar en C++.
« 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;
}
}


« Última modificación: 27 Mayo 2013, 03:08 am por SARGE553413 » En línea

flony


Desconectado Desconectado

Mensajes: 584



Ver Perfil
Re: Duda con redirección de entrada estándar en C++.
« Respuesta #1 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


En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer de la entrada estandar linea por linea « 1 2 »
Programación C/C++
Delraich 15 12,688 Último mensaje 6 Julio 2010, 19:53 pm
por MIG80
Guardar entrada estandar en un archivo de texto
Programación C/C++
gonzaloi 8 4,594 Último mensaje 3 Abril 2011, 00:23 am
por leogtz
[C++] Consulta - Usar entrada estándar o desde un archivo
Programación C/C++
Lauta 8 4,457 Último mensaje 7 Octubre 2012, 08:02 am
por Lauta
Problema entrada estándar « 1 2 »
Programación C/C++
fileteruso 11 4,210 Último mensaje 5 Diciembre 2018, 04:24 am
por AlbertoBSD
leer un array por entrada estandar (cmd)
Scripting
dijsktra 3 3,397 Último mensaje 1 Diciembre 2019, 04:29 am
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines