En aquest tema, aprendrem com utilitzar el llenguatge de programació C en l'entorn OpenVMS. Explorarem com compilar i executar programes en C, així com les particularitats i les biblioteques específiques d'OpenVMS que poden ser útils per als desenvolupadors.

Continguts

Introducció a C a OpenVMS

El llenguatge de programació C és àmpliament utilitzat en el desenvolupament de sistemes operatius, aplicacions i eines de programari. OpenVMS proporciona un entorn robust per al desenvolupament en C, amb suport per a diverses biblioteques i eines de desenvolupament.

Característiques Clau

  • Portabilitat: Els programes en C poden ser portats fàcilment a altres sistemes operatius.
  • Eficiència: C permet un control detallat sobre els recursos del sistema.
  • Compatibilitat: OpenVMS ofereix compatibilitat amb estàndards de C com ANSI C i ISO C.

Compilació i Enllaç de Programes en C

Per compilar i enllaçar programes en C a OpenVMS, utilitzarem el compilador de C proporcionat pel sistema. A continuació, es mostren els passos bàsics per compilar i executar un programa en C.

Pas 1: Crear el Codi Font

Creeu un fitxer amb el codi font del vostre programa en C. Per exemple, creeu un fitxer anomenat hello.c amb el següent contingut:

#include <stdio.h>

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

Pas 2: Compilar el Programa

Utilitzeu la comanda CC per compilar el fitxer de codi font. Aquesta comanda generarà un fitxer objecte.

$ CC hello.c

Pas 3: Enllaçar el Programa

Utilitzeu la comanda LINK per enllaçar el fitxer objecte i crear l'executable.

$ LINK hello

Pas 4: Executar el Programa

Finalment, executeu el programa resultant.

$ RUN hello

Si tot ha anat bé, veureu la sortida següent:

Hola, OpenVMS!

Biblioteques i Funcions Específiques d'OpenVMS

OpenVMS proporciona diverses biblioteques i funcions específiques que poden ser utilitzades en programes en C per aprofitar les característiques del sistema operatiu.

Biblioteques Comunes

  • LIB$: Funcions de suport general.
  • SYS$: Funcions de sistema per a la gestió de processos, fitxers, etc.
  • STR$: Funcions de manipulació de cadenes.

Exemple d'Ús de Funcions Específiques

A continuació es mostra un exemple d'ús de la funció LIB$GETJPI per obtenir informació sobre el procés actual.

#include <stdio.h>
#include <descrip.h>
#include <lib$routines.h>
#include <jpidef.h>

int main() {
    unsigned long pid = -1; // PID del procés actual
    unsigned long status;
    unsigned long buffer;
    struct dsc$descriptor_s desc;

    desc.dsc$w_length = sizeof(buffer);
    desc.dsc$a_pointer = (char *)&buffer;
    desc.dsc$b_dtype = DSC$K_DTYPE_LU;
    desc.dsc$b_class = DSC$K_CLASS_S;

    status = lib$getjpi(&JPI$_PID, &pid, 0, &desc, 0, 0);
    if (status & 1) {
        printf("PID del procés actual: %lu\n", buffer);
    } else {
        printf("Error obtenint el PID\n");
    }

    return 0;
}

Exemple Pràctic

A continuació, es presenta un exemple pràctic que combina diverses funcions de les biblioteques d'OpenVMS per crear un programa més complex.

Codi Font

#include <stdio.h>
#include <descrip.h>
#include <lib$routines.h>
#include <jpidef.h>
#include <ssdef.h>

void print_process_info() {
    unsigned long pid = -1; // PID del procés actual
    unsigned long status;
    unsigned long buffer;
    struct dsc$descriptor_s desc;

    desc.dsc$w_length = sizeof(buffer);
    desc.dsc$a_pointer = (char *)&buffer;
    desc.dsc$b_dtype = DSC$K_DTYPE_LU;
    desc.dsc$b_class = DSC$K_CLASS_S;

    status = lib$getjpi(&JPI$_PID, &pid, 0, &desc, 0, 0);
    if (status & 1) {
        printf("PID del procés actual: %lu\n", buffer);
    } else {
        printf("Error obtenint el PID\n");
    }
}

int main() {
    printf("Informació del procés a OpenVMS:\n");
    print_process_info();
    return 0;
}

Compilació i Execució

  1. Compilar:

    $ CC process_info.c
    
  2. Enllaçar:

    $ LINK process_info
    
  3. Executar:

    $ RUN process_info
    

Exercicis Pràctics

Exercici 1: Hola, OpenVMS!

Creeu un programa en C que imprimeixi "Hola, OpenVMS!" a la pantalla. Compileu-lo, enllaceu-lo i executeu-lo.

Exercici 2: Informació del Sistema

Modifiqueu l'exemple pràctic per obtenir i imprimir informació addicional del procés, com ara el nom del procés i l'estat.

Exercici 3: Gestió de Fitxers

Creeu un programa en C que creï un fitxer, escrigui algunes dades en ell i després les llegeixi i les imprimeixi a la pantalla.

Solucions

Solució Exercici 1

#include <stdio.h>

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

Solució Exercici 2

#include <stdio.h>
#include <descrip.h>
#include <lib$routines.h>
#include <jpidef.h>
#include <ssdef.h>

void print_process_info() {
    unsigned long pid = -1; // PID del procés actual
    unsigned long status;
    unsigned long buffer;
    struct dsc$descriptor_s desc;

    desc.dsc$w_length = sizeof(buffer);
    desc.dsc$a_pointer = (char *)&buffer;
    desc.dsc$b_dtype = DSC$K_DTYPE_LU;
    desc.dsc$b_class = DSC$K_CLASS_S;

    status = lib$getjpi(&JPI$_PID, &pid, 0, &desc, 0, 0);
    if (status & 1) {
        printf("PID del procés actual: %lu\n", buffer);
    } else {
        printf("Error obtenint el PID\n");
    }

    // Obtenir el nom del procés
    char proc_name[16];
    desc.dsc$w_length = sizeof(proc_name);
    desc.dsc$a_pointer = proc_name;
    desc.dsc$b_dtype = DSC$K_DTYPE_T;
    desc.dsc$b_class = DSC$K_CLASS_S;

    status = lib$getjpi(&JPI$_PRCNAM, &pid, 0, &desc, 0, 0);
    if (status & 1) {
        printf("Nom del procés: %s\n", proc_name);
    } else {
        printf("Error obtenint el nom del procés\n");
    }
}

int main() {
    printf("Informació del procés a OpenVMS:\n");
    print_process_info();
    return 0;
}

Solució Exercici 3

#include <stdio.h>

int main() {
    FILE *file;
    char data[] = "Això és una prova d'escriptura en un fitxer a OpenVMS.";

    // Crear i escriure en el fitxer
    file = fopen("testfile.txt", "w");
    if (file == NULL) {
        printf("Error obrint el fitxer per escriure\n");
        return 1;
    }
    fprintf(file, "%s\n", data);
    fclose(file);

    // Llegir del fitxer
    file = fopen("testfile.txt", "r");
    if (file == NULL) {
        printf("Error obrint el fitxer per llegir\n");
        return 1;
    }
    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    fclose(file);

    return 0;
}

Conclusió

En aquest tema, hem après com utilitzar el llenguatge de programació C a OpenVMS, incloent la compilació, l'enllaç i l'execució de programes. També hem explorat algunes de les biblioteques i funcions específiques d'OpenVMS que poden ser útils per als desenvolupadors. Els exercicis pràctics proporcionats us ajudaran a consolidar els coneixements adquirits.

Curs de Programació OpenVMS

Mòdul 1: Introducció a OpenVMS

Mòdul 2: Comandes Bàsiques d'OpenVMS

Mòdul 3: Sistema de Fitxers d'OpenVMS

Mòdul 4: Scripting amb DCL

Mòdul 5: Gestió del Sistema OpenVMS

Mòdul 6: Xarxes a OpenVMS

Mòdul 7: Programació Avançada a OpenVMS

Mòdul 8: Clúster d'OpenVMS

Mòdul 9: Seguretat a OpenVMS

Mòdul 10: Resolució de Problemes i Optimització

© Copyright 2024. Tots els drets reservats