C/Visual C - ayuda con fork()

 
Vista:

ayuda con fork()

Publicado por kapachov (2 intervenciones) el 27/03/2002 05:46:19
hola tengo un problema con un programa que estoy haciendo que marca con wvdial se conecta, obtiene una ip publica, entonces lo que debe hacer el pograma es optener esa IP publica. pero no me la da y creo que es por el do while que controla al fork() que es para que espere a que ese proceso acabe (el de marcar y obtener la ip) y luego seguir con la extracion (de la ip).

el codigo es el siguiente:

gint main()
{
int pid=0,pidaux;
gchar *pidd,*respuesta;

remove("/temporal/ip");

if(!fork())
{
char *argv[3];
argv[0] = "wvdial";
argv[1] = "ppp0";
argv[2] = NULL;
execv("/usr/bin/wvdial", argv);
exit(127);
}

sleep(50);
recomendada
respuesta=busca_ip_ppp0();
if(respuesta!=NULL)
{
g_print("\\nConexion Realizada");
g_free(respuesta);
return 1;
}
else
{
g_print("\\nConexion FALLO");
pidaux=getpid();
pid=pidaux+1;
kill(pid,9);
return -1;
}
}

gchar *busca_ip_ppp0()
{
char *aux1 = "ppp0",
*command= "ifconfig >/temporal/ip",
*argv[4],
*ip,
v[1024];

int i = 0,
j = 0,
terminar=0,
pid,
status;

FILE *PF_aux;

ip=(gchar*)malloc(sizeof(gchar)*14);

pid = fork();

if (pid == 0)
{
argv[0] = "/bin/sh";
argv[1] = "-c";
argv[2] = command;
argv[3] = NULL;
gnome_execute_async( NULL, 4, argv );
exit(127);
}

do
{
if (waitpid(pid,&status,0) == -1)
{
if (errno != EINTR)
break;
}
else
{
break;
}
}while(1);


PF_aux = fopen("/temporal/ip","r");

if (PF_aux == NULL)
{
g_print("\\nEl archivo no pudo abrirse2");
return NULL;
}

fgets(v,1024,PF_aux);

while (fgets(v,1024,PF_aux) != NULL)
{
if (strncmp(v,aux1,4) == 0)
{

terminar=1;
fgets(v,1024,PF_aux);
break;
}
}

if (terminar==0)
{
return NULL;
}

while (isdigit(v[j]) == 0)
j++;

while (isdigit(v[j]) != 0 || v[j] == '.')
{
ip[i] = v[j];
j++;
i++;
}
ip[i] = NULL;

fclose(PF_aux);

return ip;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder