En este módulo, aprenderás cómo utilizar el lenguaje de programación C en el entorno OpenVMS. Exploraremos desde la configuración del entorno de desarrollo hasta la compilación y ejecución de programas en C. Este módulo está diseñado para programadores con conocimientos básicos de C que desean aplicar sus habilidades en OpenVMS.
Contenido
Configuración del Entorno de Desarrollo
Para desarrollar en C en OpenVMS, necesitas configurar tu entorno de desarrollo adecuadamente. A continuación, se describen los pasos necesarios:
Instalación del Compilador de C
-
Verificar la Instalación del Compilador:
$ CC/VERSION
Este comando muestra la versión del compilador de C instalado en tu sistema. Si no está instalado, deberás instalarlo.
-
Instalación del Compilador: Si el compilador no está instalado, puedes instalarlo utilizando el siguiente comando (requiere privilegios de administrador):
$ @SYS$UPDATE:VMSINSTAL CC064 DKA400:[CC064.KIT]
Configuración de Variables de Entorno
- Definir la Variable de Entorno
DECC$*
:$ DEFINE DECC$ARGV_PARSE_STYLE ENABLE $ DEFINE DECC$EFS_CASE_PRESERVE ENABLE $ DEFINE DECC$EFS_CHARSET ENABLE
Estas variables de entorno aseguran que el compilador de C funcione correctamente con las características modernas del sistema de archivos y el manejo de argumentos.
Compilación de Programas en C
Una vez que el entorno está configurado, puedes compilar programas en C. Aquí hay un ejemplo básico:
Ejemplo de Código en C
Compilación del Programa
-
Guardar el Código: Guarda el código anterior en un archivo llamado
hola.c
. -
Compilar el Código:
$ CC hola.c
Este comando compila el archivo
hola.c
y genera un archivo objetohola.obj
. -
Enlazar el Programa:
$ LINK hola
Este comando enlaza el archivo objeto y genera un ejecutable llamado
hola.exe
.
Ejecución de Programas en C
Para ejecutar el programa compilado, utiliza el siguiente comando:
Deberías ver la salida:
Interfaz con Servicios del Sistema
OpenVMS proporciona una serie de servicios del sistema que puedes utilizar en tus programas en C. Aquí hay un ejemplo de cómo utilizar el servicio SYS$GETJPIW
para obtener información sobre el proceso actual.
Ejemplo de Uso de Servicios del Sistema
#include <stdio.h> #include <descrip.h> #include <jpidef.h> #include <ssdef.h> #include <starlet.h> int main() { unsigned long pid = -1; // Current process unsigned long code; unsigned long result; struct dsc$descriptor_s desc; desc.dsc$w_length = sizeof(result); desc.dsc$b_dtype = DSC$K_DTYPE_LU; desc.dsc$b_class = DSC$K_CLASS_S; desc.dsc$a_pointer = (char *)&result; code = SYS$GETJPIW(0, &pid, 0, JPI$_PID, &desc, 0, 0); if (code == SS$_NORMAL) { printf("Process ID: %lu\n", result); } else { printf("Error: %lu\n", code); } return 0; }
Compilación y Ejecución
-
Guardar el Código: Guarda el código anterior en un archivo llamado
getpid.c
. -
Compilar el Código:
$ CC getpid.c
-
Enlazar el Programa:
$ LINK getpid
-
Ejecutar el Programa:
$ RUN getpid.exe
Deberías ver la salida con el ID del proceso actual.
Ejercicios Prácticos
Ejercicio 1: Programa de Suma de Números
Descripción: Escribe un programa en C que solicite al usuario dos números enteros y muestre la suma de ambos.
Código de Ejemplo:
#include <stdio.h> int main() { int num1, num2, sum; printf("Ingrese el primer número: "); scanf("%d", &num1); printf("Ingrese el segundo número: "); scanf("%d", &num2); sum = num1 + num2; printf("La suma es: %d\n", sum); return 0; }
Pasos:
- Guarda el código en un archivo llamado
suma.c
. - Compila el código:
$ CC suma.c
- Enlaza el programa:
$ LINK suma
- Ejecuta el programa:
$ RUN suma.exe
Ejercicio 2: Uso de Servicios del Sistema
Descripción:
Modifica el programa de ejemplo que utiliza SYS$GETJPIW
para obtener y mostrar el nombre del proceso actual.
Pistas:
- Utiliza el servicio
JPI$_PRCNAM
en lugar deJPI$_PID
. - Asegúrate de definir correctamente el descriptor para el nombre del proceso.
Código de Ejemplo:
#include <stdio.h> #include <descrip.h> #include <jpidef.h> #include <ssdef.h> #include <starlet.h> int main() { unsigned long pid = -1; // Current process unsigned long code; char proc_name[32]; struct dsc$descriptor_s desc; desc.dsc$w_length = sizeof(proc_name) - 1; desc.dsc$b_dtype = DSC$K_DTYPE_T; desc.dsc$b_class = DSC$K_CLASS_S; desc.dsc$a_pointer = proc_name; code = SYS$GETJPIW(0, &pid, 0, JPI$_PRCNAM, &desc, 0, 0); if (code == SS$_NORMAL) { proc_name[desc.dsc$w_length] = '\0'; // Null-terminate the string printf("Process Name: %s\n", proc_name); } else { printf("Error: %lu\n", code); } return 0; }
Pasos:
- Guarda el código en un archivo llamado
procname.c
. - Compila el código:
$ CC procname.c
- Enlaza el programa:
$ LINK procname
- Ejecuta el programa:
$ RUN procname.exe
Conclusión
En este módulo, has aprendido cómo configurar el entorno de desarrollo para C en OpenVMS, compilar y ejecutar programas en C, y utilizar servicios del sistema en tus programas. Estos conocimientos te permitirán desarrollar aplicaciones robustas y eficientes en el entorno OpenVMS. En el próximo módulo, exploraremos el uso de Fortran en OpenVMS.
Curso de Programación en OpenVMS
Módulo 1: Introducción a OpenVMS
- ¿Qué es OpenVMS?
- Historia y Evolución de OpenVMS
- Conceptos y Terminología Básica
- Visión General de la Arquitectura del Sistema
- Instalación y Configuración
Módulo 2: Comandos Básicos de OpenVMS
- Introducción a DCL (Digital Command Language)
- Comandos de Gestión de Archivos
- Comandos de Gestión de Procesos
- Comandos de Gestión del Sistema
- Uso de Ayuda y Documentación
Módulo 3: Sistema de Archivos de OpenVMS
- Estructura del Sistema de Archivos
- Tipos y Atributos de Archivos
- Operaciones de Archivos
- Gestión de Directorios
- Control de Acceso y Seguridad
Módulo 4: Scripting con DCL
- Introducción al Scripting con DCL
- Variables y Tipos de Datos
- Estructuras de Control
- Subrutinas y Funciones
- Manejo de Errores
Módulo 5: Gestión del Sistema OpenVMS
- Gestión de Cuentas de Usuario
- Gestión de Discos y Volúmenes
- Procedimientos de Respaldo y Restauración
- Monitoreo del Sistema y Optimización del Rendimiento
- Gestión de Parches y Actualizaciones
Módulo 6: Redes en OpenVMS
- Conceptos Básicos de Redes
- Configuración de TCP/IP
- Configuración de DECnet
- Servicios y Protocolos de Red
- Solución de Problemas de Red
Módulo 7: Programación Avanzada en OpenVMS
- Introducción a los Lenguajes de Programación en OpenVMS
- Uso de C en OpenVMS
- Uso de Fortran en OpenVMS
- Uso de COBOL en OpenVMS
- Interfaz con Servicios del Sistema
Módulo 8: Clustering en OpenVMS
- Introducción al Clustering
- Configuración y Gestión de Clusters
- Comunicación en Clusters
- Conmutación por Error y Balanceo de Carga
- Seguridad en Clusters
Módulo 9: Seguridad en OpenVMS
- Conceptos de Seguridad y Mejores Prácticas
- Autenticación y Autorización de Usuarios
- Auditoría y Monitoreo
- Cifrado de Datos
- Respuesta a Incidentes y Recuperación