/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Error al acceder a un fichero(programa para hacer ping)

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
morfus_bedxhed



Registrado: 25 Nov 2010
Mensajes: 2

MensajePublicado: 06/01/2012 10:20 am
Título: Error al acceder a un fichero(programa para hacer ping)

Un saludo a todos!

Antes que nada Feliz año 2012.

Estoy haciendo un programilla para mi trabajo, se trata de enviar ping a los equipos de la red donde trabajo y validar si estàn encendidos o no, quiero que me muestre solo en la pantalla que equipo està activo y cual no.

El problema està en que la hacer ping o mando en un archivo .txt y al intentar leer el archivo para validar la respuesta me dice que no puede ser uitlizado por que otro proceso lo està ocupando.

Les paso el código esperando me puedan ayudar.

Código:

#include <iostream>
#include <string>
#include <fstream>
#include<windows.h>

using namespace std;
void ping();

static string host;
char a []= " >ping.txt";


int main()
{
SetConsoleTitle("Ping a pdvs y CVS");
ping();
system("pause");
return(0);
}

void ping()
{
char lineaping [60];
int i, contador=0;
ifstream ip("ips.txt"); //archivo que contiene la lista de las ips
char linea [25];

if (ip.fail())
    cerr<< "Error al abrir el archivo ips.txt" <<endl;
else
system ("cls");
while (!ip.eof())
{
 ip.getline(linea, sizeof(linea));
 host= strcat(linea, a);
 ofstream resp("ping.txt"); //abre el archivo para escritura
 system (("ping " + host). c_str()); //hace el ping
 resp.close(); //cerramos para volver abrirlo y leerlo
 ifstream resp1("ping.txt");
 if (resp1.fail())
    cerr<< "Error al abrir el archivo ping.txt" <<endl;
 else
  while (!resp1.eof())
    {
    resp1.getline(lineaping, sizeof(lineaping));
     if ((++contador % 10)==0)
      {
        /*comparo la lìnea 10 del archivo ping.txt para ver si en recibidos
        es igual a = 0*/
            for (i=0; i<=42; i++)
             {
                if (lineaping[i]=='0')
                    printf("[NA]\t%s",linea);
                 else
                    printf("[OK]\t%s",linea);
             }
      }
      break;
    }
    resp1.close();
}
ip.close();

}
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2479
Ubicación: Valladolid (España)

MensajePublicado: 07/01/2012 3:07 am
Título:

Hola.

Visto por encima, y al margen de algunos detalles mejorables, el problema que describes radica en que se intenta escribir en un fichero el cual se abierto previamente al redireccionar la salida de una proceso llamado mediante la función system.

Si solo necesitas un sencillo script puedes pasar de leer lo siguiente.

Si quieres algo más profesional puedes actuar así: utilizar alguna librería de bajo nivel como pcap, enviar tramas en el nivel de enlace tipo ARP o utilizar este mismo protocolo. Almacenar en un buffer las respuestas, y salvar posteriormente a fichero en determinadas condiciones.. Luego se puede añadir los ICMP echo con la misma dinámica anterior, recordando que este protocolo puede estar filtrado, o no responder en un determinado host, lo que no es sinónimo de not-alive. Por ejemplo, en mi red ningún host (incluidos routers) responden a los paquetes ICMP de este tipo.


·?0ƒ·
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
morfus_bedxhed



Registrado: 25 Nov 2010
Mensajes: 2

MensajePublicado: 07/01/2012 8:10 am
Título:

Mi estimado cheroky gracias por la recomendación, lamentablemente ahorita ando bien pollo en c/c++ y eso fue lo que se me ocurrió hacer, pero ganas de hacer esto algo más profesional no me falta, ahorita por las prisas si me gustaría que me ayudaran como solucionar este problemita mientras, por que ya le di vuelta y no le encuentro y me tiene un poco frustrado.

Espero que en no mucho tiempo ponga un código más profesional para que me des tu visto bueno.

¡Saludos!
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com