FP 047- (p)Programa comandos
personalizados para sistema operativo
Alumno:
Juan Carlos Planells Roig
jplanellsr@uoc.edu
2.
FP 47 -(p) Programas comandos personalizados para el
sistema operativo
Descripción
Dado que ya estás preparado para crear aplicaciones de consola escritas en C
usando Visual Studio, en este producto desarrollarás una aplicación en c, la
funcionalidad de la cual es que adquieras destrezas en lo referente a editar archivos
de texto.
Objetivos
El objetivo principal del producto es:
● Desarrollar una pequeña aplicación escrita en C.
● Adquirir las destrezas necesarias en lo referente a la edición de
archivos de texto y en el lanzamiento y control desde una aplicación
de comandos simples de la consola de Windows.
1.-Realizar una pequeña aplicación de consola escrita en C que implementará
las siguientes funcionalidades:
● Funcionalidad I:
Insertar la fecha y la hora en el documento de salida: producto 2.txt
(Especificar en la memoria donde se genera dicho archivo)
● Funcionalidad II:
Comprobar e informar por pantalla sobre cuáles de una lista de
máquinas referenciadas por su IP escrita en un archivo de texto,
contestan positivamente a un ping lanzado por la aplicación que estás
programando. Se recomienda generar un submenú donde se solicite el
nombre y ubicación de dicho archivo.
● Funcionalidad III:
Mostrar y guardar en un fichero llamado adaptador.txt, la configuración
de red de la máquina local para un adaptador que previamente se
preguntará al usuario.
1.-Desarrollo de la aplicación.
En primer lugar hemos desarrollado la aplicación como nos han encomendado en
este producto II de la asignatura en la cual se nos pedía que estuviera modularizada
3.
y bien comentada,además está pensada para ejecutarse en Windows y que
usemos Visual Studio (o un entorno de desarrollo similar) para que compile y se
ejecute de manera correcta.
Aquí tenéis una imagen de nuestra aplicación y su menú con las diferentes opciones
en modo consola:
Explicación general de la aplicación
1. Menú Principal:
Al iniciar el programa, se muestra un menú que permite elegir entre:
○ Opción 1: Insertar fecha y hora en el archivo producto2.txt.
○ Opción 2:
■ Solicitar al usuario la ruta/nombre de un archivo de texto con
direcciones IP.
■ Mostrar en pantalla las IP leídas.
■ Para cada IP, lanzar un ping a través de system() y
comprobar si hay respuesta.
■ Muestra en pantalla cuáles responden y guarda solamente las
que responden en producto2.txt, por debajo de la
fecha/hora que se registró anteriormente.
○ Opción 3: Información de un adaptador de red.
4.
■ Se pideel nombre (o parte) del adaptador, por ejemplo Wi-Fi
■ Se ejecuta un comando de Windows y se procesa la
información para extraer y mostrar en pantalla la IP, máscara y
puerta de enlace además de guardar en adaptador.txt
○ Opción 4: Salimos de la aplicación.
2. Archivos involucrados
○ producto2.txt: Donde se almacena la fecha/hora (funcionalidad I) y
la lista de IPs que responden al ping (funcionalidad 2).
○ adaptador.txt: guardamos la configuración de la IP, máscara y
puerta de enlace de un adaptador seleccionado (funcionalidad 3).
○ Archivos temporales: temp_ping.txt y temp_ipconfig.txt para
capturar la salida de los comandos y posteriormente analizarlos en la
aplicación.
3. Compilación
○ Hemos compilado en Visual Studio (proyecto de consola).
○ Nos ha creado un ejecutable (producto.exe) en la carpeta debug
Aquí dejamos una imagen de nuestra carpeta donde se puede ver la url de los
directorios y donde se encuentra el ejecutable.
5.
2- Funcionalidad I
Insertarla fecha y la hora en el documento de salida: producto 2.txt
(Especificar en la memoria donde se genera dicho archivo)
Esta función está diseñada de la siguiente manera:
1. Abre un archivo indicado por el parámetro nombreArchivo en modo append
(es decir, para añadir texto al final del archivo sin sobrescribir lo que ya
estuviera escrito). Así se van guardando diferentes fechas y horas en un
mismo documento.
2. Obtiene la fecha y la hora actual del sistema usando la función time() y
después localtime() para convertir el valor de tipo time_t a una
estructura de tipo tm que contiene los valores de año, mes, día, hora.
3. Escribe la fecha y hora formateadas, precedidas y seguidas de líneas
separadoras. Se crea un archivo en el directorio de nuestro proyecto en la
carpeta projectII de nuestro proyecto. Dejamos imagen.
4. Cierra el archivo y muestra un mensaje por consola confirmando que la
operación se ha realizado satisfactoriamente. En el archivo se visualiza
correctamente la fecha y hora formateada. Dejamos imagen del archivo.
6.
Se puede observarque hemos hecho ya la funcionalidad 2 y nos a puesto algunas
IP’s que ha leido y han respondido pero en los dos resultado de abajo son los que la
funcionalidad I genera.
7.
3- Funcionalidad II
Comprobare informar por pantalla sobre cuáles de una lista de máquinas
referenciadas por su IP escrita en un archivo de texto, contestan
positivamente a un ping lanzado por la aplicación que estás programando. Se
recomienda generar un submenú donde se solicite el nombre y ubicación de
dicho archivo.
Esta función comprobarIPs() cumple la finalidad de leer un archivo que contiene
un listado de direcciones IP y verificar, mediante el comando ping, cuáles de esas
IP responden correctamente.
Funciona de la siguiente manera:
1.- Se pide la ruta y nombre del archivo de IPs que hemos creado.
○ El programa solicita que se introduzca la ubicación (lo hemos puesto
dentro de la carpeta del proyecto - DNSips.txt) y el nombre. En
nuestro caso:
C:UsersUsuarioDesktopUOC25.- Comandos
personalizados para el sistema operativoProducto
IIProjectIIDNSips.txt
○ Se utiliza fgets() para leer esa ruta.
8.
2.- Archivo enmodo lectura
○ Se llama a fopen con la ruta que introdujo el usuario. Si falla la
apertura porque la ruta está mal se enseña un mensaje de error.
3.- Mostrando el contenido del archivo por pantalla
○ Se hace un bucle que lee cada línea del archivo que hemos puesto
dentro de la carpeta de proyecto y se llama DNSips
○ Por cada IP, se imprime en la consola “IP leída: <IP>”
4.- Ejecución de ping para cada IP
○ Para cada dirección IP, la función construye un comando del tipo ping
<ip> -n 1 > temp_ping.txt con snprintf.
○ Luego se llama a system(comando), lo que hace que la salida de
ping se redirija a un archivo temporal (temp_ping.txt).
5.- Guardar las IPs que responden en producto2.txt
○ Las IP que responden (donde se encontró “TTL=”) se guardan en
producto2.txt (modo append)
6.- Cerrar archivos y limpiar temporales
○ Se cierra el archivo original con las IPs y producto2.txt.
○ Se elimina el archivo temporal temp_ping.txt
9.
7.- Mostrar resumenen la consola
○ Se informa al usuario cuántas direcciones IP respondieron al ping y se
indica que han sido registradas en producto2.txt quedando
completa la función que nos han solicitado.
3- Funcionalidad III
Mostrar y guardar en un fichero llamado adaptador.txt, la configuración de red
de la máquina local para un adaptador que previamente se preguntará al
usuario.
1.- Ejecutar ipconfig /all para saber la configuración de la máquina local
Ejecuta ipconfig /all → salida guardada en temp_ipconfig.txt.
2.- Imprimir el resultado en la consola
Muestra todo el contenido en consola (para que el usuario “vea” su ipconfig
/all completo).
3.- Imprimir el resultado en la consola del ipconfig /all
Detecta las “cabeceras” de adaptador (líneas que contengan "adaptador" o
"adapter") y las guarda en lista[]. Imprime la lista numerada.
4.- Solicitar adaptador al usuario
El usuario elige el adaptador por número o por parte del nombre. Hay que poner el
nombre exacto del adaptador. Si no tiene datos para enseñar no los enseñará, por
eso hemos puesto unos DEBUGS para saber lo que está pasando. Aquí se puede
ver un ejemplo en la imagen de cómo enseñar los datos.
10.
Luego, filtra lasección correspondiente a ese adaptador para mostrar (y guardar en
adaptador.txt) las líneas que contengan IPv4, subred, puerta de
enlace, o default gateway.
11.
Se pueden visualizaren el archivo adaptador.txt que está dentro de nuestro
proyecto los datos del adaptador. Ver en la imagen.
Elimina temp_ipconfig.txt.
En definitiva, esto sería todo lo que se nos ha solicitado en este segundo
producto. Contentos con el resultado porque hemos podido generar todas las
funcionalidades en C y que funcionen de manera correcta.
Espero que sea de tu agrado.
Juan Carlos Planells Roig