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

  1. 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.

  2. 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

  1. 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

#include <stdio.h>

int main() {
    printf("Hola, OpenVMS!\n");
    return 0;
}

Compilación del Programa

  1. Guardar el Código: Guarda el código anterior en un archivo llamado hola.c.

  2. Compilar el Código:

    $ CC hola.c
    

    Este comando compila el archivo hola.c y genera un archivo objeto hola.obj.

  3. 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:

$ RUN hola.exe

Deberías ver la salida:

Hola, OpenVMS!

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

  1. Guardar el Código: Guarda el código anterior en un archivo llamado getpid.c.

  2. Compilar el Código:

    $ CC getpid.c
    
  3. Enlazar el Programa:

    $ LINK getpid
    
  4. 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:

  1. Guarda el código en un archivo llamado suma.c.
  2. Compila el código: $ CC suma.c
  3. Enlaza el programa: $ LINK suma
  4. 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 de JPI$_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:

  1. Guarda el código en un archivo llamado procname.c.
  2. Compila el código: $ CC procname.c
  3. Enlaza el programa: $ LINK procname
  4. 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

Módulo 2: Comandos Básicos de OpenVMS

Módulo 3: Sistema de Archivos de OpenVMS

Módulo 4: Scripting con DCL

Módulo 5: Gestión del Sistema OpenVMS

Módulo 6: Redes en OpenVMS

Módulo 7: Programación Avanzada en OpenVMS

Módulo 8: Clustering en OpenVMS

Módulo 9: Seguridad en OpenVMS

Módulo 10: Solución de Problemas y Optimización

© Copyright 2024. Todos los derechos reservados