| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
morfus_bedxhed
Registrado: 25 Nov 2010 Mensajes: 2
| Publicado: 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)
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |