Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda facil para vosotros(supongo)

Estas en el tema de Duda facil para vosotros(supongo) en el foro de C/C++ en Foros del Web. Saludos. He creado este interprete de comandos para que puede ejecutar programas de /bin/ y de el directorio actual: #include <fcntl.h> #include <stdio.h> #include <string.h> ...
  #1 (permalink)  
Antiguo 26/10/2007, 17:39
 
Fecha de Ingreso: noviembre-2005
Mensajes: 5
Antigüedad: 19 años, 2 meses
Puntos: 0
Exclamación Duda facil para vosotros(supongo)

Saludos. He creado este interprete de comandos para que puede ejecutar programas de /bin/ y de el directorio actual:

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{
int pid,status;
int esta=0; /* Esta variable nos indica si &*/
/* se encuentra en el comando introducido*/
int posicion; /*En esta variable se almacena la posicion del &*/
int i; /*Contador*/
char programa[20];
char bin[20];
printf("\pedro: ");
gets(programa);
if(strlen(programa)!=0) /*Por si el usuario pulsa enter directamente*/
{
for(i=0;i<=(strlen(programa)-1);i++)
{
if(programa[i]=='&')
{
esta=1;
posicion=i;
}
}
/*Siempre busca el & al final de la cadena*/

if(esta)
programa[posicion]='\0';
}
while(strcmp(programa,"salir")!=0)
{
switch(pid=fork()){
case -1: /*Gestion del error*/
exit(1);
break;
case 0: /*Proceso hijo*/
strcpy(bin,"./");
strcat(bin,programa);
execl(bin,programa,0);
strcpy(bin,"/bin/");
strcat(bin,programa);
execl(bin,programa,0);
printf("\nComando o nombre de archivo incorrecto\n");
exit(1);
break;
default: /*Proceso padre*/

/*Si existe background, el proceso padre*/
/*no esperara al hijo*/

if (!esta) wait(&status);
break;
}
esta=0;
printf("\pedro: ");
gets(programa);
fflush(stdin);
if(strlen(programa)!=0) /*Por si el usuario no introduce nada*/
{
for(i=0;i<=(strlen(programa)-1);i++)
{
if(programa[i]=='&')
{
esta=1;
posicion=i;
}
}
/*Siempre busca el & al final de la cadena*/

if(esta)
programa[posicion]='\0';
}
}
printf("\nFin de la ejecucion\n");
return 0;
}/*fin de main*/


Ahora bien, el programa creo que funciona, porque ejecuta en background y en modo normal (si pudieseis probarlo me hariais un favor). Lo que no se hacer es que quiero que me reconozca tambien si pongo sleep 10& para poder ver que esta ejecutandose en background. Este codigo no incluye los parametros (no quiero que los incluya) pero solo quiero que me reconozca sleep 10. Indicadme si es posible como hacerlo, gracias.
  #2 (permalink)  
Antiguo 27/10/2007, 02:49
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Duda facil para vosotros(supongo)

Primero, por favor publica el código entre tags CODE.

Segundo, Si lo único que quieres es que reconozca a sleep 10& y a nadie más con dos parámetros, lo más sencillo es que incluyas una condición que busque "sleep " en el principio de la cadena obtenida -incluido el espacio- antes de proceder a nada más; y si se cumple, ejecutarla entera.
  #3 (permalink)  
Antiguo 28/10/2007, 17:55
 
Fecha de Ingreso: noviembre-2005
Mensajes: 5
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Duda facil para vosotros(supongo)

OK. Gracias . Problema resuelto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:14.